Déposer
Le fichier est une représentation abstraite de "fichier" et "répertoire pathname".
Le fichier est directement hérité de l'objet, implémentant l'interface sérialisable et l'interface comparable. L'implémentation de l'interface sérialisable signifie que les objets de fichier prennent en charge les opérations de sérialisation. L'implémentation de l'interface comparable signifie que les objets de fichier peuvent être dimensionnés; Les fichiers peuvent être directement stockés dans des ensembles ordonnés (tels que TreeSet et Treemap).
1. Méthodes courantes pour créer de nouveaux répertoires
Méthode 1: Créez un nouveau répertoire basé sur le chemin relatif.
L'exemple de code est le suivant (créer le nouveau répertoire "DIR" sous le chemin actuel):
File dir = nouveau fichier ("dir"); dir.mkdir (); Méthode 2: Créez un nouveau répertoire basé sur le chemin absolu.
L'exemple de code est le suivant (créer le nouveau répertoire "/ home / skywang / dir"):
File dir = nouveau fichier ("/ home / skywang / dir"); dir.mkDirs (); Remarque: Ce qui précède est le code source du nouveau répertoire "/ home / skywang / dir" sous le système Linux. Sous Windows, si vous souhaitez créer un nouveau répertoire "d: / dir", le code source est le suivant:
File dir = nouveau fichier ("d: / dir"); dir.mkdir (); Méthode 3
Uri uri = new uri ("file: / home / skywang / dir"); File dir = nouveau fichier (uri); sub.mkdir (); Remarque: similaire à "Méthode 2", sauf que le chemin complet est passé dans "Method 2", tandis que le chemin complet est passé dans "Method 3" est l'URI correspondant au chemin complet.
2. Plusieurs méthodes courantes pour créer un nouveau sous-répertoire. Par exemple, nous voulons créer un nouveau sous-répertoire sous le sous-répertoire "DIR" du répertoire actuel. Il y a plusieurs façons:
Méthode 1
File sub1 = new File ("dir", "sub1"); sub1.mkdir (); Remarque: La fonction de la méthode ci-dessus est de "Dir / sub1" dans le répertoire actuel. La prémisse pour qu'il s'exécute normalement est que le répertoire parent "dir" de "sub1" existe déjà!
Méthode 2
Fichier sub2 = nouveau fichier (dir, "sub2"); sub.mkdir ();
Remarque: La fonction de la méthode ci-dessus est de "dir / sub2" dans le répertoire actuel. La prémisse pour qu'il s'exécute normalement est que le répertoire parent "dir" de "sub2" existe déjà!
Méthode 3
Fichier sub3 = new File ("dir / sub3"); sub.mkDirs (); Remarque: La fonction de la méthode ci-dessus est de "dir / sub3" dans le répertoire actuel. Il ne nécessite pas d'exister DIR et peut fonctionner normalement; Si le chemin parent de "sub3" n'existe pas, la méthode MKDIRS () créera automatiquement le répertoire parent.
Méthode 4
Fichier sub4 = nouveau fichier ("/ home / skywang / dir / subs4"); sub.mkDirs (); Remarque: La fonction de la méthode ci-dessus est de créer un nouveau répertoire "/ home / skywang / dir / sub3". Il ne nécessite pas d'exister de DIR et peut fonctionner normalement; Si le chemin parent de "sub4" n'existe pas, la méthode MKDIRS () créera automatiquement le répertoire parent.
Méthode 5
Uri uri = new uri ("file: / homewang / dir / sub5"); Fichier sub5 = new File (URI); sub5.mkDirs (); Remarque: similaire à "Méthode 4", sauf que le chemin complet est passé dans "Method 4", tandis que le chemin complet est passé dans "Method 5" et que l'URI correspondant au chemin complet est passé.
3. Plusieurs méthodes courantes pour créer de nouveaux fichiers
Par exemple, nous voulons créer un nouveau fichier sous le sous-répertoire du répertoire actuel "DIR". Il existe plusieurs méthodes 1
essayez {fichier dir = nouveau fichier ("dir"); // obtient l'objet de fichier correspondant au répertoire "dir" file file1 = new File (dir, "file1.txt"); file1.createenewfile ();} catch (ioException e) {e.printStackTrace ();} Remarque: La fonction du code ci-dessus est de créer un nouveau fichier "file1.txt" dans le répertoire "DIR" (chemin relatif).
Méthode 2
essayez {fichier file2 = new file ("dir", "file2.txt"); file2.CreateEnewFile ();} catch (ioException e) {e.printStackTrace ();} Remarque: La fonction du code ci-dessus est de créer un nouveau fichier "file2.txt" dans le répertoire "dir" (chemin relatif).
Méthode 3
try {file file3 = new file ("/ homewang / dir / file3.txt"); file3.CreateEnewFile ();} catch (ioException e) {e.printStackTrace ();} Remarque: La fonction du code ci-dessus est de créer un nouveau fichier "/home/skywang/dir/file3.txt" (chemin absolu). Il s'agit d'une méthode basée sur le chemin absolu de Linux. Dans Windows, vous pouvez créer un nouveau fichier "d: /dir/file4.txt" via le code suivant.
try {file file3 = new File ("d: /dir/file4.txt"); file3.CreateEnewFile ();} catch (ioException e) {e.printStackTrace ();} Méthode 4
essayez {uri uri = new uri ("file: /home/skywang/dir/file4.txt"); Fichier file4 = nouveau fichier (uri); file4.CreateEnewFile ();} catch (ioException e) {e.printStackTrace ();} illustrer:
Semblable à "Méthode 3", sauf que le chemin complet est passé dans "Method 3", tandis que le chemin complet est passé dans "Method 4" est l'URI correspondant au chemin complet.
4. Exemple d'utilisation de l'API de fichier
Pour une utilisation détaillée des API dans le fichier, reportez-vous à l'exemple de code (filest.java):
import java.io.file; import java.io.ioException; import java.net.uri; import java.util.calendar; import java.text.simpledateFormat; public class filest {public static void main (string [] argse) {testFileStaticFields (); TestFileDirapis (); } public static void testFileStaticFields () {// Imprimer Path Séparateur ":" System.out.printf ("file.pathseparator = /"% s / "/ n", file.pathseparator); // Imprimer le séparateur de chemin ':' System.out.printf ("file.pathseparatorchar = /"% c / "/ n", file.pathseparatorchar); // imprime le délimiteur "/" System.out.printf ("file.separator = /"% s / "/ n", file.separator); // imprime Delimiter '/' System.out.printf ("file.separatorchar = /"% c / "/ n", file.separator); // imprime le délimiteur '/' System.out.printf ("file.separatorchar = /"% c / "/ n", file.separatorchar); } public static void testFileDirapis () {try {// Créer un nouveau répertoire "dir" file dir = nouveau file ("dir"); dir.mkdir (); // Méthode 1: Créez un nouveau répertoire "Dir / sub1". Le répertoire parent "dir" doit déjà exister! Fichier sub1 = nouveau fichier ("dir", "sub1"); sub1.mkdir (); // Méthode 2: Créez un nouveau répertoire "Dir / sub2". Le répertoire parent "dir" doit déjà exister! Fichier sub2 = nouveau fichier (dir, "sub2"); sub.mkdir (); // Méthode 3: Créez un nouveau répertoire "dir / sub3". MKDIRS () créera automatiquement un répertoire parent qui n'existe pas. Fichier sub3 = nouveau fichier ("dir / sub3"); sub3.mkDirs (); // Méthode 4: Créez un nouveau répertoire "Dir / sub4". Créés selon "Absolute Path", les 3 premières méthodes sont créées sur la base du "chemin relatif". String dirpath = dir.getabsolutepath (); // Obtenez le chemin absolu de la chaîne "Dir" sub4abspath = dirpath + file.separator + "sub4"; // file.separator est le délimiteur "/" file sub4 = new file (sub4abspath); sub4.mkDirs (); // Méthode 5: Créez un nouveau répertoire "Dir / sub5". Selon URI String URI_SUB5_PATH = "File:" + Dirpath + File.separator + "sub5"; Uri uri_sub5 = new uri (uri_sub5_path); Fichier sub5 = nouveau fichier (uri_sub5); sub5.mkDirs (); // Méthode 1: Créez un nouveau fichier "dir / l1_normal.txt" Fichier L1_Normal = nouveau fichier (dir, "l1_normal.txt"); l1_normal.createenewfile (); // Méthode 2: Créez un nouveau fichier "dir / .l1_hide.txt". Fichier l1_hide = nouveau fichier ("dir", ".l1_hide.txt"); // Dans Linux, le fichier commençant par "." est un fichier caché. L1_Hide.CreateEwFile (); // Méthode 3: Créez un nouveau fichier "dir / l1_abs.txt". String dirabspah = dir.getabsolutepath (); // Obtenez le chemin absolu de Dir String l1_abs_path = dirabspah + file.separator + "l1_abs.txt"; Fichier l1_abs = nouveau fichier (l1_abs_path); l1_abs.createenewfile (); //System.out.printf("l1_abs_path=%S/n ", l1_abs_path); //System.out.printf("l1_abs path =% s / n ", l1_abs.getabsolutepath ()); // Méthode 4: Créez un nouveau fichier "dir / l1_uri.txt". Créez un nouveau fichier en fonction de la chaîne URI URI_PATH = "File:" + dirabspah + file.separator + "l1_uri.txt"; Uri uri_l1 = new uri (uri_path); //System.out.printf("uri_l1=%S/n ", l1_abs.getabsolutepath ()); Fichier l1_uri = nouveau fichier (uri_l1); l1_uri.createenewfile (); // Créer un nouveau fichier "dir / sub / s1_normal" fichier s1_normal = new File (sub1, "s1_normal.txt"); S1_Normal.CreateEnewFile (); 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 est /"% s / "/ n", "s1_normal.lastmodified ()", s1_normal.lastmodified (), getmodifytime (s1_normal.lastmodified ())); System.out.printf ("% 30S =% S / N", "S1_NORMAL.TOURI ()", S1_NORMAL.TOURI ()); // Liste des "fichiers" et des "dossiers" dans le répertoire "DIR". // Remarque: dir.listFiles () ne fera que traverser le répertoire DIR, pas les sous-répertoires de Dir! System.out.println ("--- Liste des fichiers et des dossiers ----"); File [] fs = dir.listFiles (); pour (fichier f: fs) {string fname = f.getName (); String ABSSTR = f.isabsolute ()? "[Absolu]": ""; String Hiddenstr = f.ishidden ()? "[Caché]" : ""; String dirstr = f.isdirectory ()? "[Répertoire]": ""; String FileStr = F.Sifile ()? "[Déposer]" : ""; System.out.printf ("% - 30S% s% s% s% s / n", fname, filestr, dirstr, absstr, hiddenstr); }} catch (exception e) {e.printStackTrace (); }} chaîne statique privée getModifyTime (Long Millis) {// Obtenir l'objet Calendar Calendar Cal = Calendar.getInstance (); // Réglez le temps sur Millis Cal.SetTimeInmillis (Millis); // obtient l'objet formaté, il formara la date en fonction de "Yyyy-mm-dd hh: mm: ss" SimpledateFormat sdf = new SimpledateFormat ("yyyy-mm-dd hh: mm: ss"); //System.out.printf("time% s / n ", str); return sdf.format (cal.getTime ()); }} Exécution des résultats (exécution des résultats dans le système Ubuntu 12.04, pas Windows!):
File.pathseparator = ":" file.pathseparatorchar = ":" file.separator = "/" file.separatorchar = "/" s1_normal.exists () = true s1_normal.getname () = s1_normal.txt s1_normal.getparent () = dir / sub1 s1_normal.getpath () = dir / sub1 / s1_normal.txt s1_normal.getabsolutepath () = /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.tx /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt s1_normal.lastmodified () = 1381730064000 est "2013-10-14 13:54:24" S1_normal.Touri () = = fichier: /home/skywang/wind_talker/workout/java/skywang/io/io/src/file/dir/sub1/s1_normal.txt --- lister les fichiers et les dossiers ---- l1_uri.txt [fichier] sub1 [Directory] L1_ABS.TXT [fichier] sub5 [Directory] Sub4 [Directory]. [Fichier] [Hidden] sub3 [répertoire] sub2 [répertoire] l1_normal.txt [fichier]
Résultats: Lors de l'exécution du programme, un nouveau répertoire "DIR" sera créé dans le répertoire où se trouve le fichier source, ses sous-répertoires et sous-fichiers. Comme indiqué dans la figure ci-dessous:
File d'accès
FileDescriptor est un "descripteur de fichiers".
FileDescriptor peut être utilisé pour représenter des fichiers ouverts, des prises ouvertes, etc.
Pour représenter un fichier par FiledEscriptor: Lorsque FiledEscriptor représente un fichier, nous pouvons simplement considérer FileDescriptor comme le fichier. Cependant, nous ne pouvons pas opérer directement sur le fichier via FileDescriptor; Si nous devons fonctionner sur le fichier via FileDescriptor, nous devons créer un fichierOutputStream correspondant à FileDescriptor, puis opérer sur le fichier.
dans, err, err introduction
(1) dans - Descripteur pour une entrée standard (clavier)
(2) OUT - Le descripteur de la sortie standard (écran)
(3) ERR - Les descripteurs de la sortie d'erreur standard (écran) sont similaires en principe et en utilisation. Effectuons des recherches approfondies tout au long.
1.1 Le rôle et le principe de l'extérieur
OUT est le descripteur de la sortie standard (écran). Mais que fait-il?
Nous pouvons le comprendre d'une manière simple qui représente la sortie standard (écran). Si nous voulons produire des informations à l'écran, nous pouvons les faire fonctionner via OUT; Cependant, OUT ne fournit pas d'interface pour sortir des informations à l'écran (car OUT est essentiellement un objet FiledScriptor, et FiledEscriptor n'a pas d'interface de sortie). Ce qu'il faut faire?
C'est très simple. Nous créons «l'objet de flux de sortie» correspondant à OUT, puis publions les informations à l'écran via l'interface de sortie telle que Write () du «Stream Stream». Le code suivant:
try {fileoutputStream out = new FileOutputStream (fileDescriptor.out); out.write ('a'); out.close ();} catch (ioexception e) {} Exécutez le programme ci-dessus et la lettre «A» sera sortie à l'écran.
Afin de faciliter notre opération, Java a longtemps encapsulé "l'interface qui peut facilement produire des informations sur l'écran" pour nous: via System.out, nous pouvons facilement produire des informations à l'écran.
Par conséquent, nous pouvons convertir de manière équivalente le programme ci-dessus en code suivant:
System.out.print ('A'); Parlons des principes des deux codes ci-dessus pour voir la définition de Out. Sa définition est dans fileDescriptor.java, et le code source pertinent est le suivant:
classe finale publique FileDeScriptor {private int fd; public static final filedEscriptor out = new FileDescriptor (1); Private FileDescriptor (int fd) {this.fd = fd; useCount = new atomicInteger (); } ...} De là, on peut voir que
(1) OUT est un objet FiledEscriptor. Il est créé via le constructeur FiledEscriptor (INT FD).
(2) FiledEscriptor (int fd) Opération: Attribuez des valeurs à l'objet FD (Type int) et créez une nouvelle variable de nombre à l'aide de UseCount.
L'objet FD est une variable très importante. "FD = 1" représente "la sortie standard", "FD = 0" représente "une entrée standard", et "FD = 2" représente "la sortie d'erreur standard".
FileoutputStream out = new FileOutputStream (fileDescriptor.out);
Il s'agit d'utiliser le constructeur FileOutputStream (FileDescriptor FDOBJ) pour créer l'objet "FileOutputStream correspondant à filed.out".
Sur la façon dont le système est défini. Vous pouvez vous référer à "une compréhension approfondie de System.out.println (" Hello World ")"
Grâce à l'apprentissage ci-dessus, nous savons que nous pouvons personnaliser les flux de descripteurs de fichiers standard [c'est-à-dire dans (entrée standard), OUT (sortie d'erreur standard) et ERR (sortie d'erreur standard)] pour terminer la fonction d'entrée / sortie; Cependant, Java a encapsulé l'interface correspondante pour nous, c'est-à-dire que nous pouvons utiliser System.in, System.out, System.err plus commodément.
De plus, nous pouvons également personnaliser les descripteurs de fichiers pour "fichier", "socket", etc., puis les opérer. Reportez-vous à TestWrite (), TestRead () et d'autres interfaces dans l'exemple de code suivant.
2. Exemple de code
Le code source est le suivant (FileDescriptorTest.java):
import java.io.printstream; import java.io.filedescriptor; import java.io.fileInputStream; import java.io.fileOutputStream; import java.io.ioException; public class fileDescriptOrest {private static final string filename = "file.txt"; String final statique privé outtext = "hi filedescriptor"; public static void main (String [] args) {testwrite (); TestRead (); TestStandfd (); //System.out.println(outText); } / ** * Programme de test de FileDescriptor.out * * L'effet de ce programme est équivalent à System.out.println (outtext); * / private static void testStandfd () {// Créer le printStream PrintStream out correspondant = new PrintStream (new FileOutputStream (fileDescriptor.out)); // output "hi filedescriptor" sur l'écran out.println (outtext); out.close (); } / ** * FileDescriptor écrivant un exemple de programme * * (1) pour illustrer: "Création de fichiers FileOutStream par nom de fichier" est équivalent à "Création de fichiers FileOutStream par le descripteur de fichier" Objet * (2) Le programme créera un nouveau fichier "file.txt" dans le répertoire où "le fichier source" est situé, et le contenu de fichier "aa". * / private static void testwrite () {try {// Créer un objet fileoutputStream correspondant au fichier "file.txt" fileOutputStream out1 = new fileoutputStream (filename); // obtient le "descripteur de fichier" correspondant au fichier "file.txt" FileDescriptor fdout = out1.getfd (); // Créer un objet "FileOutputStream" basé sur le "File Descriptor" FileOutputStream out2 = new FileOutputStream (fdout); out1.write ('a'); // Écrivez 'a' à "file.txt" via out1 out2.write ('a'); // Écrivez 'a' to "file.txt" via out2 if (fdout! = Null) System.out.printf ("fdout (% s) est% s / n", fdout, fdout.valid ()); out1.close (); out2.close (); } catch (ioException e) {e.printStackTrace (); }} / ** * FileDescriptor Read Exemple Program * * Pour illustrer, "Créer FileInputStream par nom de fichier" est équivalent à "Créer FileInputStream par Fichier Descripteur" Objet * / Private Static Void TestRead () {TryInputStream in1 = New FileInStream correspondant au fichier "File.txt" FileInStream in1 = New FileInputStream (FileName); // obtient le "descripteur de fichier" correspondant au fichier "file.txt" FileDescriptor fdin = in1.getfd (); // Créer un objet "FileInputStream" en fonction du "File Descriptor" FileInputStream in2 = new FileInputStream (fdin); System.out.println ("in1.read ():" + (char) in1.read ()); System.out.println ("in2.read ():" + (char) in2.read ()); if (fdin! = null) System.out.printf ("fdin (% s) est% s / n", fdin, fdin.valid ()); in1.close (); in2.close (); } catch (ioException e) {e.printStackTrace (); }}} Résultats en cours:
fdout (java.io.filedescriptor@2b820dda) est truein1.read (): ain2.read (): afdin (java.io.filedescriptor@675b7986) est truehi filedEescriptor