Le fichier IO dans Java7 a subi d'excellents changements, et de nombreuses nouvelles classes ont été introduites spécifiquement:
Importer java.nio.file.directorystream; import java.nio.file.filesystem; import java.nio.file.filesystems; import java.nio.file.files; import java.nio.file.path; import java.nio.file.pathes; import java.nio.file.attrut.file. java.nio.file.attribute.posixFilePermissions;
...... attendez, pour remplacer la méthode d'opération d'origine IO du fichier d'origine basé sur java.io.file.
1. Path remplace le fichier
Un chemin représente un chemin hiérarchique et composé d'une séquence d'éléments de répertoire et de nom de fichier séparés par un séparateur spécial ou un délimiteur.
Le chemin est utilisé pour représenter des chemins de fichier et des fichiers. Il existe plusieurs façons de construire un objet Path pour représenter un chemin de fichier ou un fichier:
1) Tout d'abord, il existe deux méthodes statiques des chemins de classe finaux. Comment construire un objet de chemin à partir d'une chaîne de chemin:
Path path = paths.get ("c: /", "xmp"); Path path2 = paths.get ("c: / xmp"); Uri u = uri.create ("fichier: /// c: / xmp / dd"); Path p = paths.get (u);2) Construction des systèmes de fichiers:
Path path3 = filesystems.getDefault (). GetPath ("c: /", "access.log");3) Conversion entre fichier et chemin, conversion entre le fichier et l'URI:
File file = new File ("c: /my.ini"); path p1 = file.topath (); p1.tofile (); file.touri ();4) Créez un fichier:
Path Target2 = paths.get ("c: //mystuff.txt"); // set <OsixFilePermiser> perms = posixFilePermissions.FromString ("RW-RW-RW -"); // fileaTRribute <Set <OsixFilePermiser >> attres = posixFilePermissions.asfileAtTraut if (! files.exists (cible2)) files.createFile (Target2);} catch (ioException e) {e.printStackTrace ();}POSIXFILEPERMISSION n'est pas prise en charge dans Windows pour spécifier les autorisations RWX.
5) Files.newBufferedReader lit le fichier:
try {// charset.forname ("gbk") BufferedReader reader = files.newbufferedReader (paths.get ("c: //my.ini"), standardcharsets.utf_8); String str = null; while ((str = reader.readline ())! = null) {System.out.println (str); }} catch (ioException e) {e.printStackTrace (); }Vous pouvez voir que l'utilisation de fichiers.NewBuffereDReader est beaucoup plus facile que le package FileInputStream d'origine puis le package BufferedReader.
Ici, si le codage de caractères spécifié est incorrect, une exception peut être lancée ou un code brouillé peut être lu:
java.nio.charset.malformedInputexception: Longueur d'entrée = 1 à java.nio.charset.coderresult.throwException (coderresult.java:281) à sun.nio.cs.streamdecoder.implead (streamdecoder.java:339) Sun.nio.cs.streamdecoder.read (streamdecoder.java:178) sur java.io.inputStreamreader.read (inputStreamreader.java:184) à java.io.bufferedreader.fill (bufferedreader.java:161) java.io.bufferedeader.readline (buffereDeader.java:324) sur java.io.buffereader.readline (bufferedeader.java:389) sur com.coin.test.main (test.java:79)
6) Opération de rédaction de fichiers:
essayez {bufferedwriter scénariste = files.newbotteredwriter (paths.get ("c: //my2.ini"), standardCharsets.utf_8); writer.write ("Test File Write Operation"); écrivain.flush (); writer.close ();} catch (ioException e1) {e1.printStackTrace ();}7) Traverser un dossier:
Path dir = paths.get ("d: // webworkspace"); Try (DirectoryStream <AtHtH> Stream = files.newDirectoryStream (dir)) {for (path e: stream) {System.out.println (e.getFileName ()); }} catch (ioexception e) {} try (stream <athat> stream = files.list (paths.get ("c: /"))) {iterator <ath> item = stream.iterator (); while (ite.hasnext ()) {path pp = item.next (); System.out.println (pp.getFileName ()); }} catch (ioException e) {e.printStackTrace (); }Ce qui précède traverse un seul répertoire, il ne traverse pas l'intégralité du répertoire. Vous devez utiliser: files.walkfiletree
8) Traverser l'intégralité du répertoire de fichiers:
public static void main (string [] args) lève ioException {path startedir = paths.get ("c: //apache-tomcat-8.0.21"); List <ath> result = new LinkedList <Athath> (); Files.walkFileTree (startedir, new Findjavavisitor (résultat)); System.out.println ("result.size () =" + result.size ()); } classe statique privée findjavavisitor étend SimpleFileVisitor <Athath> {private list <path> résultat; public findjavavisitor (list <ath> result) {this.result = result; } @Override public fileVisitResult VisitFile (Path File, BasicFileAtTributes attrs) {if (file.toString (). Endswith (". Java")) {result.add (file.getFileName ()); } return fileVisitResult.Continue; }}Prenons un exemple pratique:
public static void main (String [] args) lève ioException {path startedir = paths.get ("f: // upload // images"); // f: // upload // images // 2 // 20141206 list <path> result = new LinkedList <Athath> (); Files.walkFileTree (startedir, new Findjavavisitor (résultat)); System.out.println ("result.size () =" + result.size ()); System.out.println ("Done."); } classe statique privée findjavavisitor étend SimpleFileVisitor <Athath> {private list <path> résultat; public findjavavisitor (list <ath> result) {this.result = result; } @Override public fileVisitResult VisitFile (fichier path, BasicFileAtTributes attrs) {String filepath = file.tofile (). GetAbSolutePath (); if (filepath.matches (". * _ [1 | 2] {1} //. (? i) (jpg | jpeg | gif | bmp | png)")) {try {files.deleteifeXists (file); } catch (ioException e) {e.printStackTrace (); } result.add (file.getFileName ()); } return fileVisitResult.Continue; }}Supprimer toutes les images qualifiées dans le répertoire: filepath.matches (". * _ [1 | 2] {1} //. (? I) (jpg | jpeg | gif | bmp | png)")
public static void main (string [] args) lève ioException {path startedir = paths.get ("f: // 111111 // upload // images"); // f: / 111111 // upload // images // 2 // 20141206 list <path> result = new LinkedList <Athath> (); Files.walkFileTree (startedir, new Findjavavisitor (résultat)); System.out.println ("result.size () =" + result.size ()); System.out.println ("Done."); } classe statique privée findjavavisitor étend SimpleFileVisitor <Athath> {private list <path> résultat; public findjavavisitor (list <ath> result) {this.result = result; } @Override public fileVisitResult VisitFile (fichier path, BasicFileAtTributes attrs) {String filepath = file.tofile (). GetAbSolutePath (); Int largeur = 224; int hauteur = 300; StringUtils.SubstringBeforElast (filepath, "."); String newpath = stringUtils.substringBeForElast (filepath, ".") + "_1." + StringUtils.SubStringAfterLast (filepath, "."); essayez {imageUtil.zoomage (filepath, newpath, largeur, hauteur); } catch (ioException e) {e.printStackTrace (); return fileVisitResult.continue; } result.add (file.getFileName ()); return fileVisitResult.continue; }}Génère une miniature de la taille spécifiée pour toutes les images du répertoire. A.jpg génère a_1.jpg
2. puissant java.nio.file.files
1) Créer des répertoires et des fichiers:
essayez {files.CreateDirectories (paths.get ("c: // test")); if (! files.exists (paths.get ("c: // test"))) files.createFile (paths.get ("c: //test/test.txt")); // files.createDirectries (paths.get ("c: //test/test2.txt");} Catch (ioException e) {e.printStackTrace ();};};Notez que le répertoire de création et les fichiers de fichiers. Vous devez avoir un répertoire avant de pouvoir créer des fichiers dans le répertoire.
2) Copie de fichier:
Copier du fichier vers le fichier: files.copy (source de chemin, cible path, options de copie);
Copiez à partir du flux d'entrée vers le fichier: files.copy (InputStream in, Path Target, CopyOption Options);
Copier du fichier vers le flux de sortie: files.copy (Path Source, OutputStream out);
essayez {files.CreateDirectories (paths.get ("c: // test")); if (! files.exists (paths.get ("c: // test"))) files.createFile (paths.get ("c: //test/test.txt")); // files.createDirectries (paths.get ("c: //test/test2.txt")); Files.copy (paths.get ("c: //my.ini"), System.out); Files.copy (paths.get ("c: //my.ini"), paths.get ("c: //my2.ini"), standardCopyOption.replace_existing); Files.copy (System.in, paths.get ("c: //my3.ini"), standardcopyOption.replace_existing);} catch (ioException e) {e.printStackTrace ();}3) itérer dans un répertoire et un dossier. Il a été introduit ci-dessus: files.newDirectoryStream, files.walkfiletree
4) Lire les propriétés du fichier:
Path zip = paths.get (uri); System.out.println (files.getLastModifiedTime (ZIP)); System.out.println (files.size (zip)); System.out.println (files.issymboliclink (zip)); System.out.println (files.isdirectory (zip)); System.out.println (files.readAttributes (zip, "*"));
5) Lire et définir les autorisations de fichiers:
Path Profile = paths.get ("/ home / digdeep / .profile"); PosixFileAtTributes attrs = files.readattributes (profil, posixFileAtTributes.class); // Permission de lire les fichiers set <OSIXFilePermissions> POSIXPERMISSIONS = att.Permissions (); POSIXPERMISSIONS.CLEAR (); String propriétaire = attrs.owner (). GetName (); String perms = posixFilePermissions.ToString (POSIXPERMISSIONS); System.out.format ("% s% s% n", propriétaire, perms); posixpermissions.add (posixFilePermiser.owner_read); posixPermissions.add (posixFilePermission.group_read); POSIXPERMISSIONS.ADD (POSIXFILEPERMIST. posixpermissions.add (posixFilePermiser.owner_write); Files.setPosixFilePermissions (profil, posixPermissions); // définir les autorisations du fichierLa classe de fichiers est tout simplement puissante, et presque toutes les propriétés connexes des fichiers et répertoires ont l'API souhaitée à prendre en charge. Je suis trop paresseux pour continuer à l'introduire ici, veuillez vous référer à la documentation de JDK8 pour plus de détails.
Un exemple pratique:
Importer java.io.bufferedReader; Importer java.io.bufferedwriter; import java.nio.charset.standardcharsets; import java.nio.file.files; importer java.nio.file.path; import java.nio.file.pathes; essai {essai {essai {essai {essai {essai {essai {essai {essai {essai {essai {essai {essai {Try {Try {{Try {Try {Try {Public STATIC STATIC VOID Main (string [] {Try {Try {Strucy {Try {Try { BufferedReader Reader = files.newBuffereDReader (paths.get ("c: //members.sql"), standardCharsets.utf_8); BufferedWriter writer = files.newBufferedWriter (paths.get ("c: //members3.txt"), standardCharsets.utf_8); String str = null; while ((str = reader.readline ())! = null) {if (str! = null && str.indexof (", cast (0x")! = -1 && str.Indexof ("as DateTime)")! = -1) {String newttr = str.substring (0, str.indexof (", Cast")) + ")"; écrivain.write (newstr); écrivain.newline (); }} writer.flush (); écrivain.close (); } catch (exception e) {e.printStackTrace (); }}}Le scénario est que lorsque SQL Server exporte des données, le Datatime sera exporté dans un format binaire hexadécimal, tel que: Cast (0x0000A2A500FC2E4F en tant que datetime)))
Par conséquent, le programme ci-dessus exporte le dernier champ Datatime, supprime CAST (0x0000AA2A500FC2E4F en tant que DateTime) pour générer un nouveau script SQL qui ne contient pas la valeur du champ DateTime. Utilisé pour importer dans MySQL.
À mi-chemin, il y a en fait une meilleure façon. L'utilisation de SQL YOG peut importer de manière flexible des tables et des données dans SQL Server dans MySQL. L'utilisation de la fonction d'exportation de données de SQL Server est difficile à gérer.
L'utilisation ci-dessus (explication détaillée) basée sur la classe de fichiers Java et la classe de chemin est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.