Die Datei IO in Java7 hat große Änderungen durchlaufen, und viele neue Klassen wurden speziell eingeführt:
importieren java.nio.file java.nio.file.attribute.poSixFilePermissions;
...... Warten Sie, um die ursprüngliche Datei -IO -Betriebsmethode basierend auf java.io.file zu ersetzen.
1. Pfad ersetzt die Datei
Ein Pfad repräsentiert einen Weg, der hierarchisch ist und aus einer Abfolge von Verzeichnis- und Dateinamenelementen besteht, die von einem speziellen Trennzeichen oder Trennzeichen getrennt sind.
Pfad wird verwendet, um Dateipfade und Dateien darzustellen. Es gibt verschiedene Möglichkeiten, ein Pfadobjekt zu konstruieren, um einen Dateipfad oder eine Datei darzustellen:
1) Erstens gibt es zwei statische Methoden der endgültigen Klassenpfade. So konstruieren Sie ein Pfadobjekt aus einer Pfadzeichenfolge:
Path path = paths.get ("c:/", "xmp"); Path path2 = paths.get ("c:/xmp"); Uri u = uri.create ("Datei: /// c:/xmp/dd"); Pfad p = paths.get (u);2) Konstruktion von Dateisystemen:
Path path3 = fileSystems.getDefault (). GetPath ("c:/", "access.log");3) Konvertierung zwischen Datei und Pfad, Konvertierung zwischen Datei und URI:
Datei Datei = new File ("c: /my.ini"); Pfad p1 = file.topath (); p1.tofile (); file.touri ();4) Erstellen Sie eine Datei:
Path target2 = paths.get ("c: //mystuff.txt"); // set <posixFilePermission> perms = posixFilepermissionen.FromString ("rw-rw-rw-"); // fangeattribute <set <posIXFilermission >> attrs = posixFilePermission.asfileTtribute (Perms); Perms); if (! files.exists (target2)) Dateien.CreateFile (target2);} catch (ioException e) {e.printstacktrace ();};POSIXFilePermission wird in Windows nicht unterstützt, um RWX -Berechtigungen anzugeben.
5) Dateien.NewbuffenedReader liest die Datei:
try {// charset.forname ("gbk") bufferedReader reader = files.newbuffenedReader (paths.get ("c: //my.ini"), Standardcharets.utf_8); String str = null; while ((str = reader.readline ())! = null) {System.out.println (str); }} catch (ioException e) {e.printstacktrace (); }Sie können sehen, dass die Verwendung von Dateien.NewbuffenedReader viel einfacher ist als der Original -FileInputStream und dann das BufferedReader -Paket.
Wenn die angegebene Zeichenkodierung falsch ist, kann eine Ausnahme ausgelöst oder ein verstümmelter Code gelesen werden:
java.nio.charset.malformedInputException: Eingangslänge = 1 at java.nio.charset.Coderresult.ThrowException (coderresult.java:281) at sun.nio.cs.streamdecoder.implread (streamdecoder.java:339) AT sun.nio.cs.streamdecoder.read (streamdecoder.java:178) unter java.io.inputStreamReader.read (InputStreamReader.java:184) bei Java.io.BuffeedReader.Fill (BufferedReader.java:161) ATREADREADER.java:161) ATREADREADER.java:161) ATREADER) ATREADREADER.java:161) ATREADER) ATREADER.java:161) ATREADER). java.io.bufufferedReader.readline (bufferedReader.java:324) unter java.io.buffenedreader.readline (bufferedReader.java:389) bei com.coin.test.main (test.java:79)
6) Operation des Dateischreibens:
try {bufferedWriter writer = files.newbuffenedWriter (paths.get ("c: //my2.ini"), StandardCharets.utf_8); writer.write ("Testerdatei -Schreibvorgang"); writer.flush (); writer.close ();} catch (ioException e1) {e1.printstacktrace ();}7) einen Ordner durchqueren:
Path Dir = paths.get ("d: // webworkspace"); try (DirectoryStream <Path> Stream = Dateien.NewDirectoryStream (Dir)) {für (Pfad e: stream) {System.out.println (e.getFileName ()); }} catch (ioException e) {} try (stream <path> stream = files.list (paths.get ("c:/"))) {iterator <path> item = stream.iterator (); while (ite.hasnext ()) {path pp = item.next (); System.out.println (pp.getFileName ()); }} catch (ioException e) {e.printstacktrace (); }Das obige Durchqueren eines einzelnen Verzeichnisses, es führt nicht das gesamte Verzeichnis. Sie müssen verwenden: Dateien.WalkFiletree
8) Überqueren Sie das gesamte Dateiverzeichnis:
public static void main (String [] args) löst ioException {path startDir = paths.get ("c: //apache-tomcat-8.0.21") aus; Liste <Path> result = new LinkedList <Path> (); Dateien.WalkFiletree (Startdir, neuer Findjavavisitor (Ergebnis)); System.out.println ("result.size () =" + result.size ()); } private statische Klasse findjavisisitor erweitert SimpleFileSisitor <Path> {private Liste <Path> Ergebnis; public findjavisitor (List <Path> Ergebnis) {this.result = result; } @Override public FileVesitResult VisitFile (Pfaddatei, BasicFileTtributes attrs) {if (file.toString (). Endswith (". Java")) {result.add (File.GetFilename ()); } return FileVisVitResult.Continue; }}Nehmen wir ein praktisches Beispiel:
public static void main (String [] args) löst ioException {path startDir = paths.get ("f: // Upload // Bilder") aus; // f: // hochladen // Bilder // 2 // 20141206 list <path> result = new LinkedList <Path> (); Dateien.WalkFiletree (Startdir, neuer Findjavavisitor (Ergebnis)); System.out.println ("result.size () =" + result.size ()); System.out.println ("Done."); } private statische Klasse findjavisisitor erweitert SimpleFileSisitor <Path> {private Liste <Path> Ergebnis; public findjavisitor (List <Path> Ergebnis) {this.result = result; } @Override public FileVesitResult VisitFile (Pfaddatei, BasicFileTtributes attrs) {String filepath = file.toFile (). GetAbsolutepath (); if (filepath.matches (".*_ [1 | 2] {1} //. } catch (ioException e) {e.printstacktrace (); } result.add (file.getFileName ()); } return FileVisVitResult.Continue; }}Löschen Sie alle qualifizierten Bilder im Verzeichnis: filepath.matches (".*_ [1 | 2] {1} //. (? I) (jpg | jpeg | gif | bmp | png)")
public static void main (String [] args) löst ioException {path startDir = paths.get ("f: // 111111 // Upload // Bilder") aus; // f:/111111 // hochladen // Bilder // 2 // 20141206 LIST <PATH> result = new LinkedList <Path> (); Dateien.WalkFiletree (Startdir, neuer Findjavavisitor (Ergebnis)); System.out.println ("result.size () =" + result.size ()); System.out.println ("Done."); } private statische Klasse findjavisisitor erweitert SimpleFileSisitor <Path> {private Liste <Path> Ergebnis; public findjavisitor (List <Path> Ergebnis) {this.result = result; } @Override public FileVesitResult VisitFile (Pfaddatei, BasicFileTtributes attrs) {String filepath = file.toFile (). GetAbsolutepath (); int width = 224; int Höhe = 300; Stringutils.SubstringBeForelast (Filepath, "."); String newpath = Stringutils.substringBeForelast (Filepath, ") +" _1 ". + Stringutils.substringAfterLast (Filepath, "."); try {imageutil.zoomimage (Filepath, NewPath, Breite, Höhe); } catch (ioException e) {e.printstacktrace (); return FileVisVitResult.Continue; } result.add (file.getFileName ()); return FileVisVitResult.Continue; }}Generiert eine Miniaturansicht der angegebenen Größe für alle Bilder im Verzeichnis. A.jpg generiert a_1.jpg
2. Mächtige java.nio.file.files
1) Erstellen von Verzeichnissen und Dateien:
try {files.Createdirectories (paths.get ("c: // test")); if (! files.exists (paths.get ("c: // test")))).Beachten Sie, dass das Erstellungsverzeichnis und die Dateidateien.Createdirectories und Dateien.CreateFile nicht gemischt werden können. Sie müssen ein Verzeichnis haben, bevor Sie Dateien im Verzeichnis erstellen können.
2) Dateikopie:
Kopieren Sie von Datei zu Datei: Datei.copy (Pfadquelle, Pfadziel, Kopieroptionen);
Kopieren Sie aus dem Eingabestream in die Datei: Dateien.copy (InputStream in, Pfadziel, Kopieroptionen);
Kopieren Sie von Datei zu Ausgabe Stream: Dateien.copy (Pfadquelle, Ausgabestream Out);
try {files.Createdirectories (paths.get ("c: // test")); if (! files.exists (paths.get ("c: // test")))). Dateien.Copy (paths.get ("c: //my.ini"), System.out); Files.copy (paths.get ("c: //my.ini"), paths.get ("c: //my2.ini"), StandardCopyOption.replace_existing); Dateien.Copy (System.in, paths.get ("c: //my3.ini"), StandardCopyOption.replace_existing);} catch (ioException e) {e.printstacktrace ();}3) durch ein Verzeichnis und einen Ordner durchzusetzen. Es wurde oben eingeführt: Dateien.NewdirectoryStream, Dateien.WalkFiletree
4) Dateieigenschaften lesen:
Pfadzip = paths.get (URI); System.out.println (Dateien.getLastModifiedTime (ZIP)); System.out.println (Dateien.Size (ZIP)); System.out.println (files.issymbolicLink (ZIP)); System.out.println (Dateien.isDirectory (ZIP)); System.out.println (Dateien.Readattributes (ZIP, "*"));
5) Lesen und Festlegen von Dateiberechtigungen:
Pfad profile = paths.get ("/home/digdeep/.profile"); PosixFileTtributes attrs = files.readattributes (Profil, posixFileTtributes.class); // Berechtigung zum Lesen von Dateien, die <posixFilepermissionen> posixpermissions = attr.Permissions () gelesen haben; posixpermissions.clear (); String -Besitzer = attr.Owner (). GetName (); String Perms = posixFilePermissions.toString (posixpermissions); System.out.Format ("%s%s%n", Eigentümer, Perms); posixpermissions.add (posixFilePermission.OWNER_READ); posixpermissions.add (posixFilePermission.group_read); posixpermissions.add (posixFilePermission.other_read); posixpermissions.add (posixFilePermission.OWNER_WRITE); Dateien.SetPoSixFilePermissions (Profil, Posixpermissions); // Berechtigungen der Datei festlegenDie Dateienklasse ist einfach leistungsstark, und fast alle verwandten Eigenschaften von Dateien und Verzeichnissen haben die gewünschte API zur Unterstützung. Ich bin zu faul, um es hier weiter vorzustellen. Weitere Informationen finden Sie in der Dokumentation von JDK8.
Ein praktisches Beispiel:
Import Java.io.BufferedReader; Import Java.io.BuffenedWriter; Import Java.nio.Charset.Standardcharsets; Import Java.nio.file.files; Importieren Sie Java.nio.file.path; path; java.nio.file.paths; Reader = Dateien.NewbuffenedReader (paths.get ("c: //members.sql"), StandardCharets.utf_8); BufferedWriter writer = files.newbuffenedWriter (paths.get ("c: //members3.txt"), StandardCharsets.utf_8); String str = null; while ((str = reader.readline ())! = null) {if (str! = null && str.indexof (", cast (0x")! Writer.Write (Newstr); writer.newline (); }} writer.flush (); writer.close (); } catch (Ausnahme e) {e.printstacktrace (); }}}Das Szenario ist, dass der Datenatime, wenn SQL Server -Daten exportiert, in ein hexadezimales binäres Format wie: Cast (0x0000A2A500FC2E4F als DateTime) exportiert wird.
Daher exportiert das obige Programm das letzte Feld DataTime, löscht Cast (0x0000A2A500FC2E4F als DateTime), um ein neues SQL -Skript zu generieren, das den Felddatenfeld nicht enthält. Wird verwendet, um in MySQL zu importieren.
Auf halbem Weg gibt es tatsächlich einen besseren Weg. Durch die Verwendung von SQL -Yog können Tabellen und Daten in SQL Server flexibel in MySQL importieren. Die Verwendung der Funktion des Exportierens von Daten aus SQL Server ist schwer zu handhaben.
Die obige Verwendung (detaillierte Erklärung) basierend auf der Klasse der Java -Dateien und Pfade ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.