Datei
Datei ist eine abstrakte Darstellung von "Datei" und "Verzeichnispfadname".
Die Datei wird direkt aus dem Objekt geerbt und implementiert die serialisierbare Schnittstelle und eine vergleichbare Schnittstelle. Durch die Implementierung der serialisierbaren Schnittstelle unterstützen Dateiobjekte Serialisierungsvorgänge. Implementieren der vergleichbaren Schnittstelle bedeutet, dass Dateiobjekte dimensioniert werden können. Dateien können direkt in bestellten Sätzen (wie Treeset und Treemap) gespeichert werden.
1. Häufige Methoden zum Erstellen neuer Verzeichnisse
Methode 1: Erstellen Sie ein neues Verzeichnis basierend auf dem relativen Pfad.
Der Beispielcode ist wie folgt (erstellen Sie das neue Verzeichnis "Dir" unter dem aktuellen Pfad):
Datei Dir = new Datei ("reichen"); Dir.mkdir (); Methode 2: Erstellen Sie ein neues Verzeichnis basierend auf dem absoluten Pfad.
Der Beispielcode lautet wie folgt (erstellen Sie das neue Verzeichnis "/home/Skywang/dir"):
Datei Dir = new Datei ("/home/skywang/dir"); Dir.mkdirs (); Hinweis: Das obige ist der Quellcode des neuen Verzeichnisses "/home/Skywang/dir" unter dem Linux -System. Wenn Sie unter Windows ein neues Verzeichnis "D:/dir" erstellen möchten, lautet der Quellcode wie folgt:
Datei Dir = new Datei ("d:/dir"); Dir.mkdir (); Methode 3
URI URI = New URI ("Datei:/home/Skywang/dir"); Datei Dir = New Datei (URI); sub.mkdir (); Hinweis: Ähnlich wie "Methode 2", außer dass der vollständige Pfad in "Methode 2" übergeben wird, während der vollständige Pfad in "Methode 3" übergeben wird, ist die URI, die dem vollständigen Pfad entspricht.
2. Mehrere gemeinsame Methoden zur Erstellung eines neuen Unterverzeichnisses. Zum Beispiel möchten wir ein neues Unterverzeichnis unter dem Unterverzeichnis "Dir" des aktuellen Verzeichnisses erstellen. Es gibt verschiedene Möglichkeiten:
Methode 1
Datei sub1 = neue Datei ("Dir", "sub1"); sub1.mkdir (); HINWEIS: Die Funktion der obigen Methode ist "Dir/Sub1" im aktuellen Verzeichnis. Die Prämisse, dass es normal ausgeführt wird, ist, dass das übergeordnete Verzeichnis "Dir" von "Sub1" bereits existiert!
Methode 2
Datei sub2 = neue Datei (DIR, "sub2"); sub2.mkdir ();
HINWEIS: Die Funktion der obigen Methode ist im aktuellen Verzeichnis "Dir/Sub2". Die Prämisse, dass es normal ausgeführt wird, ist, dass das übergeordnete Verzeichnis "Dir" von "sub2" bereits existiert!
Methode 3
Datei sub3 = neue Datei ("Dir/sub3"); sub3.mkdirs (); HINWEIS: Die Funktion der obigen Methode ist im aktuellen Verzeichnis "Dir/Sub3". Es ist nicht erforderlich, dass Dir existiert und normal laufen kann. Wenn der übergeordnete Pfad von "sub3" nicht vorhanden ist, erstellt die Methode mkdirs () das übergeordnete Verzeichnis automatisch.
Methode 4
Datei sub4 = neue Datei ("/home/skywang/dir/sub4"); sub4.mkdirs (); Hinweis: Die Funktion der obigen Methode besteht darin, ein neues Verzeichnis "/home/Skywang/dir/sub3" zu erstellen. Es ist nicht erforderlich, dass Dir existiert, und es kann normal laufen. Wenn der übergeordnete Pfad von "sub4" nicht vorhanden ist, erstellt die mkdirs () -Methode das übergeordnete Verzeichnis automatisch.
Methode 5
URI URI = new URI ("Datei:/home/skywang/dir/sub5"); Datei sub5 = neue Datei (URI); sub5.mkdirs (); Hinweis: Ähnlich wie "Methode 4", außer dass der vollständige Pfad in "Methode 4" übergeben wird, während der vollständige Pfad in "Methode 5" übergeben wird und der URI, der dem vollständigen Pfad entspricht, eingegeben wird.
3. Mehrere gängige Methoden zum Erstellen neuer Dateien
Zum Beispiel möchten wir eine neue Datei unter dem Unterverzeichnis des aktuellen Verzeichnisses "Dir" erstellen. Es gibt verschiedene Methoden 1
try {file dir = new File ("dir"); // das Dateiobjekt abrufen, das dem Verzeichnis "DIR" -Datei 1 = neue Datei (DIRE, "Datei1.txt") entspricht; Datei1.CreateNewFile ();} catch (ioException e) {e.printstacktrace ();} HINWEIS: Die Funktion des oben genannten Code besteht darin, eine neue Datei "Datei1.txt" im Verzeichnis "DIR" (relativer Pfad) zu erstellen.
Methode 2
try {file file2 = new Datei ("dir", "file2.txt"); File2.CreateNewFile ();} catch (ioException e) {e.printstacktrace ();} HINWEIS: Die Funktion des oben genannten Code besteht darin, eine neue Datei "Datei2.txt" im Verzeichnis "DIR" (relativer Pfad) zu erstellen.
Methode 3
try {file file3 = new Datei ("/home/skywang/dire/file3.txt"); File3.CreateNewFile ();} catch (ioException e) {e.printstacktrace ();} Hinweis: Die Funktion des obigen Codes besteht darin, eine neue Datei "/home/skywang/dir/file3.txt" (absoluter Pfad) zu erstellen. Dies ist eine Methode, die auf dem absoluten Pfad unter Linux basiert. In Windows können Sie über den folgenden Code eine neue Datei "d: /dir/file4.txt" erstellen.
try {Dateidatei3 = neue Datei ("d: /dir/file4.txt"); File3.CreateNewFile ();} catch (ioException e) {e.printstacktrace ();} Methode 4
try {uri uri = new Uri ("Datei: /home/skywang/dir/file4.txt"); Datei Datei4 = neue Datei (URI); File4.CreateNewFile ();} catch (ioException e) {e.printstacktrace ();} veranschaulichen:
Ähnlich wie "Methode 3", außer dass der vollständige Pfad in "Methode 3" übergeben wird, während der vollständige Pfad in "Methode 4" übergeben wird, ist die URI, die dem vollständigen Pfad entspricht.
4. Beispiel für Datei -API -Verwendung
Eine detaillierte Verwendung von APIs in der Datei finden Sie im Beispielcode (Filetest.java):
import Java.io.file; import java.io.ioxception; import java.net.uri; import java.util.calendar; import java.text.SimpledateFormat; öffentliche Klasse Filetest {public static void Main (String [] args) {TestFilestaticFields (); Testfiledirapis (); } public static void testfilestaticfields () {// PATH -Trennzeichen drucken ":" System.out.printf ("Datei.PathSeParator =/"%s/"/n", Datei.PathSeParator); // Pfadabscheider drucken ':' System.out.printf ("Datei.PathSeParatorchar =/"%c/"/n", Datei.PathSeParatorChar); // Drucken des Delimiter "/" System.out.printf ("Datei.separator =/"%s/"/n", Datei.separator); // drucken delimiter '/' system.out.printf ("file.separatorchar =/"%c/"/n", Datei.separator); // drucken delimiter '/' system.out.printf ("file.separatorchar =/"%c/"/n", File.separatorChar); } public static void testfiledirapis () {try {// Neues Verzeichnis "Dir" Datei DIRE = new Datei ("dir"); dir.mkdir (); // Methode 1: Erstellen Sie ein neues Verzeichnis "Dir/Sub1". Das übergeordnete Verzeichnis "Dir" muss bereits existieren! Datei sub1 = neue Datei ("Dir", "sub1"); sub1.mkdir (); // Methode 2: Erstellen Sie ein neues Verzeichnis "Dir/Sub2". Das übergeordnete Verzeichnis "Dir" muss bereits existieren! Datei sub2 = neue Datei (DIR, "sub2"); sub2.mkdir (); // Methode 3: Erstellen Sie ein neues Verzeichnis "Dir/Sub3". MKDIRS () erstellt automatisch ein übergeordnetes Verzeichnis, das nicht existiert. Datei sub3 = neue Datei ("Dir/sub3"); sub3.mkdirs (); // Methode 4: Erstellen Sie ein neues Verzeichnis "Dir/Sub4". Erstellt nach "Absolute Path", werden die ersten 3 Methoden basierend auf "Relativer Path" erstellt. String dirpath = dir.getabsolutepath (); // den absoluten Pfad von "Dir" String sub4abspath = DirPath + Datei.separator + "sub4" erhalten; // File.Sesparator ist der Delimiter "/" Datei sub4 = neue Datei (sub4abspath); sub4.mkdirs (); // Methode 5: Erstellen Sie ein neues Verzeichnis "Dir/Sub5". Gemäß URI -String uri_sub5_path = "Datei:" + DirPath + Datei.separator + "sub5"; URI URI_SUB5 = new URI (URI_SUB5_PATH); Datei sub5 = neue Datei (URI_SUB5); sub5.mkdirs (); // Methode 1: Erstellen Sie eine neue Datei "DIR/L1_NOMMAL.TXT" Datei l1_normal = neue Datei (DIR, "l1_Normal.txt"); l1_normal.createNewFile (); // Methode 2: Erstellen Sie eine neue Datei "Dir/.l1_hide.txt". Datei l1_hide = new Datei ("dir", ".l1_hide.txt"); // In Linux beginnt die Datei mit "." ist eine versteckte Datei. l1_hide.createNewFile (); // Methode 3: Erstellen Sie eine neue Datei "Dir/l1_abs.txt". String dirabspah = dir.getabsolutepath (); // den absoluten Pfad der Dir String l1_abs_path = Dirabspah+file.separator+"l1_abs.txt"; Datei l1_abs = neue Datei (l1_abs_path); l1_abs.createNewFile (); //System.out.printf("l1_abs_path=%S/n ", l1_abs_path); //System.out.printf("l1_abs path =%s/n ", l1_abs.getabsolutepath ()); // Methode 4: Erstellen Sie eine neue Datei "Dir/l1_uri.txt". Erstellen Sie eine neue Datei gemäß der URI -String uri_path = "Datei:" + dirabspah + file.separator + "l1_uri.txt"; URI URI_L1 = New URI (URI_PATH); //System.out.printf("uri_l1=%S/n ", l1_abs.getabsolutepath ()); Datei l1_uri = neue Datei (URI_L1); l1_uri.createNewFile (); // Erstellen Sie eine neue Datei "DIR/sub/s1_Normal" Datei s1_normal = neue Datei (sub1, "s1_normal.txt"); s1_normal.createNewFile (); System.out.printf (" %30S = %s/n", "s1_normal.exists ()", s1_normal.exists ()); System.out.printf (" %30S = %s/n", "s1_normal.getName ()", s1_normal.getName ()); System.out.printf (" %30S = %s/n", "s1_normal.getParent ()", s1_normal.getParent ()); System.out.printf (" %30S = %s/n", "s1_normal.getPath ()", s1_normal.getPath ()); System.out.printf (" %30S = %s/n", "s1_normal.getabsolutepath ()", s1_normal.getabsolutepath ()); System.out.printf (" %30S = %s/n", "s1_normal.getCanonicalPath ()", s1_normal.getCanonicalPath ()); System.out.printf ("%30S =%S IS/"%s/"/n", "s1_normal.lastmodified ()", s1_normal.lastmodified (), getModifyTime (S1_Normal.LastModified ()); System.out.printf (" %30S = %s/n", "s1_normal.touri ()", s1_normal.touri ()); // Listen Sie "Dateien" und "Ordner" im Verzeichnis "Dir" auf. // Hinweis: Dir.Listfiles () durchquert nur das Verzeichnis DIR, nicht die Unterverzeichnisse von Dir! System.out.println ("--- List-Dateien und Ordner ----"); Datei [] fs = dir.Listfiles (); für (Datei f: fs) {String fname = f.getName (); String abSstr = f.isabsolute ()? "[Absolut]": ""; String hiddenstr = f.ishidden ()? "[Versteckt]" : ""; String dirstr = f.isdirectory ()? "[Verzeichnis]": ""; String filest = f.isfile ()? "[Datei]" : ""; System.out.printf ("%-30s%S%S%S%S/N", fname, filest, dirstr, abstr, hiddenstr); }} catch (Ausnahme e) {e.printstacktrace (); }} private statische String getModifyTime (Long Millis) {// Calendar -Objekt -Kalender cal = calendar.getInstance (); // Legen Sie die Zeit auf Millis Cal.settimeinmillis (Millis) fest; // Erhalten Sie das formatierte Objekt, es wird das Datum gemäß "yyyy-mm-dd hh: mm: ss" simpleDateFormat sdf = new SimpledateFormat ("yyyy-mm-dd hh: mm: ss") formatieren; //System.out.printf("Time %s/n ", str); return sdf.format (cal.getTime ()); }} Auslaufergebnisse (Auslaufergebnisse unter Ubuntu 12.04 System, nicht Windows!):
Datei.PathSeparator = ":" Datei.PathSerparatorchar = ":" Datei.separator = "/" Datei.separatorchar = "/" s1_normal.exists () = true s1_normal.getName () = s1_normal.txt s1_normal.getParent () = sub1/sub1/sub1_norm.normal.normal.normal.normal.norm/S1_NOmal.normal.Normal.GEMAL/S1_NOMAL.NORMAL.NORMALL. s1_normal.getabsolutepath () = /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt s1_normal.getcanicalpath () = /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt S1_Normal.lastModified () = 1381730064000 IS "2013-10-14 13:54:24" S1_NOURIGOVER.TOURI () = 2013-14 13:54:24 " Datei: /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt-List-Dateien und Ordner ---- l1_uri.txt [Datei] sub1 [Directory] l1_abs.txt [Directory]. [Datei] [Hidden] Sub3 [Verzeichnis] Sub2 [Verzeichnis] l1_Normal.txt [Datei]
Ergebnisse: Beim Ausführen des Programms wird ein neues Verzeichnis "Dir" im Verzeichnis erstellt, in dem sich die Quelldatei befindet, ihre Unterverzeichnisse und Unterfiles. Wie in der Abbildung unten gezeigt:
FEMPERSCRIPTOR
Fungedescriptor ist ein "Dateideskriptor".
Der montedescriptor kann verwendet werden, um geöffnete Dateien, geöffnete Sockets usw. darzustellen, usw.
Um eine Datei durch einen Anmeldeskriptor darzustellen: Wenn der Anmeldeskriptor eine Datei darstellt, können wir den FileDescriptor einfach als die Datei betrachten. Wir können jedoch nicht direkt über den Anmeldeskriptor auf der Datei arbeiten. Wenn wir über den Anmeldeskriptor in der Datei arbeiten müssen, müssen wir einen DateiOutputStream erstellen, der dem FileDescriptor entspricht, und dann auf der Datei arbeiten.
In, heraus, ierige Einführung in
(1) In - Deskriptor für Standardeingabe (Tastatur)
(2) OUT - Der Deskriptor für Standardausgabe (Bildschirm)
(3) ERR - Die Deskriptoren der Standardfehlerausgabe (Bildschirm) sind im Prinzip und der Verwendung ähnlich. Lassen Sie uns eingehende Forschung durchführen.
1.1 Die Rolle und das Prinzip von Out
Out ist der Deskriptor für die Standardausgabe (Bildschirm). Aber was macht es?
Wir können es auf einfache Weise verstehen, die die Standardausgabe darstellt (Bildschirm). Wenn wir Informationen auf den Bildschirm ausgeben möchten, können wir sie durch die Out bedienen. Out liefert jedoch keine Schnittstelle zur Ausgabe von Informationen auf dem Bildschirm (da OUT im Wesentlichen ein Anmeldeskriptor -Objekt ist, und der FileDescriptor keine Ausgabeschnittstelle hat). Was zu tun?
Es ist sehr einfach. Wir erstellen das "Ausgabestream -Objekt", das dem Out entspricht, und geben die Informationen dann über die Ausgabebestandoberfläche wie write () des "Ausgabestreams" auf den Bildschirm aus. Der folgende Code:
try {FileOutputStream out = new FileOutputStream (apledescriptor.out); out.write ('a'); out.close ();} catch (ioException e) {} Führen Sie das obige Programm aus und der Buchstaben 'A' wird auf dem Bildschirm ausgegeben.
Um unseren Betrieb zu erleichtern, hat Java die "Schnittstelle, die Informationen auf dem Bildschirm problemlos ausgeben" für uns: Durch System.OUT.
Daher können wir das obige Programm gleich in den folgenden Code umwandeln:
System.out.print ('a'); Lassen Sie uns über die Prinzipien der beiden oben genannten Codes sprechen, um die Definition von Out zu sehen. Seine Definition ist in fatedescriptor.java, und der entsprechende Quellcode lautet wie folgt:
öffentliche endgültige Klasse fileDescriptor {private int fd; public static final ageedescriptor out = new FileDescriptor (1); private ageedescriptor (int fd) {this.fd = fd; useCount = new AtomicInteger (); } ...} Daraus kann man sehen, dass das
(1) OUT ist ein ageedescriptor -Objekt. Es wird über den Konstruktor fileedescriptor (int fd) erstellt.
(2) Vorgang des Anmeldeskriptors (int FD): Weisen Sie dem FD -Objekt (int -Typ) Werte zu und erstellen Sie eine neue Zählvariable unter Verwendung von UseCount.
Das FD -Objekt ist eine sehr wichtige Variable. "fd = 1" repräsentiert "Standardausgabe", "fd = 0" repräsentiert "Standardeingang" und "fd = 2" repräsentiert "Standardfehlerausgabe".
FileOutputStream out = new FileOutputStream (apledescriptor.out);
Es soll den Konstruktor -FileOutputStream (FALLESCRIPTOR FDOBJ) verwendet werden, um das "FileOutputStream -Objekt, das dem angezierten" entsprechend "zu erstellen".
Über wie System.out definiert wird. Sie können sich auf "eingehendes Verständnis von System.out.println (" Hello World ") verweisen" "
Durch das obige Lernen wissen wir, dass wir die Streams von Standarddateideskriptoren [d. H. In (Standardeingabe), OUT (Standardfehlerausgabe) und ERR (Standardfehlerausgabe)] anpassen können, um die Eingabe-/Ausgabefunktion zu vervollständigen. Java hat jedoch die entsprechende Schnittstelle für uns verkapselt, dh können wir system.in, System.out, System.err bequemer verwenden.
Darüber hinaus können wir auch Dateideskriptoren für "Datei", "Socket" usw. anpassen und dann darauf arbeiten. Siehe TestWrite (), Testread () und andere Schnittstellen im folgenden Beispielcode.
2. Beispielcode
Der Quellcode lautet wie folgt (apledescriptortest.java):
importieren java.io.printstream; import java.io.filedescriptor; import java.io.fileinputstream; importieren java.io.fileoutputStream; import Java.io.ioException; öffentliche Klassenanmeldeskription {private static endgültige String FileName = "Datei.txt"; private statische endgültige String -Outtext = "Hi FileDescriptor"; public static void main (String [] args) {testwrite (); testread (); teststandfd (); //System.out.println(outtext); } /*** Testerprogramm von appelledescriptor.out** Der Effekt dieses Programms entspricht system.out.println (Outtext); */ private statische void testStandfd () {// Erstellen Sie den entsprechenden Printstream PrintStream out = new printStream (neuer FileOutputStream (apledescriptor.out)); // Ausgabe "HI agreedescriptor" auf dem Bildschirm out.println (Outtext); out.close (); } /*** APPATEDESCRIPTOR Schreiben Sie Beispielprogramm*** (1) Um zu veranschaulichen: "Dateinputsstream erstellen" entspricht "DateiOutputStream durch Dateideskriptor" Objekt* (2) Das Programm erstellt eine neue Datei "Datei". */ private static void testwrite () {try {// DateiOutputStream -Objekt erstellen, das der Datei "Datei.txt" FileOutputStream Out1 = New FileOutputStream (Dateiname) entspricht; // den "Dateideskriptor" erhalten, der der Datei "Datei.txt" entspricht. // Objekt "FileOutputStream" basierend auf dem "Dateideskriptor" FileOutputStream out2 = new FileOutputStream (FDOut); out1.Write ('a'); // Schreiben Sie 'a' zu "Datei.txt" über Out1 Out2.Write ('a'); // Schreiben Sie 'a' zu "Datei.txt" über Out2 if (fdout! = Null) system.out.printf ("fdout ( %s) is %s/n", fdout, fdout.valid ()); out1.close (); out2.close (); } catch (ioException e) {e.printstacktrace (); }} / *** ABSCRIPTOR lesen Beispielprogramm** Um zu veranschaulichen: "DateinputStream erstellen" ist äquivalent zu "DateiInputStream durch Dateideskriptor" Objekt* / private statische void testRead () {try {// Datei -Dateistream -Objekt erstellen. // den "Dateideskriptor" erhalten, der der Datei "Datei.txt" entspricht. // "FileInputStream" -Objekt anhand des "Dateideskriptors" FileInputStream in2 = New FileInputStream (FDIN) erstellen; System.out.println ("in1.read ():"+(char) in1.read ()); System.out.println ("in2.Read ():"+(char) in2.Read ()); if (fdin! = null) system in1.close (); in2.close (); } catch (ioException e) {e.printstacktrace (); }}} Auslaufergebnisse:
fdout (java.io.filedescriptor@2b820dda) ist truein1.read (): ain2.read (): afdin (java.io.filedescriptor@675b7986) ist Truehi FileDescriptor