File IO di Java7 telah mengalami perubahan besar, dan banyak kelas baru telah diperkenalkan secara khusus:
Impor java.nio.file.directorystream; impor java.nio.file.fileSystem; impor java.nio.file.filesystems; impor java.nio.file.file.pathspaths; empore.path; impor java.nio.file.paths; java.nio.file.attribute.posixfilePermissions;
...... tunggu, untuk mengganti metode operasi file IO asli berdasarkan java.io.file.
1. Path menggantikan file
Jalur mewakili jalur yang hierarkis dan terdiri dari urutan elemen nama direktori dan file yang dipisahkan oleh pemisah atau pembatas khusus.
Path digunakan untuk mewakili jalur dan file file. Ada beberapa cara untuk membangun objek path untuk mewakili jalur file, atau file:
1) Pertama -tama, ada dua metode statis dari jalur kelas akhir. Cara membangun objek jalur dari string path:
Path path = paths.get ("c:/", "xmp"); Path path2 = paths.get ("c:/xmp"); Uri u = uri.create ("File: /// C:/xmp/dd"); Path p = paths.get (u);2) Konstruksi Sistem File:
Path path3 = fileSystems.getDefault (). GetPath ("c:/", "access.log");3) Konversi antara file dan path, konversi antara file dan uri:
File file = file baru ("c: /my.ini"); path p1 = file.topath (); p1.tofile (); file.touri ();4) Buat file:
Path target2 = paths.get ("c: //mystuff.txt"); // set <posixfilePermission> perms = posixfilePermissions.fromString ("rw-rw-rw-"); // fileattribute <set <posixfilePermission >> attrs = posixfilePerMissions.aSfileat (posixfilePermission >> attrs = posixfileperSions.aSfileat (posixfilePermission >> attrs = posixfilePerSions.aSfileat (posixfileatribute >> attrs = posixfilePerMissions.aSfileate (posixfileatribute; if (! File.exists (target2)) file.createFile (target2);} catch (ioException e) {e.printstacktrace ();}POSIXFilePermission tidak didukung di Windows untuk menentukan izin RWX.
5) file.newbufferedReader membaca file:
coba {// charset.forname ("gbk") buferedReader reader = file.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 (); }Anda dapat melihat bahwa menggunakan file.newbufferedReader jauh lebih mudah daripada fileInputStream asli dan kemudian paket buferedReader.
Di sini, jika pengkodean karakter yang ditentukan tidak benar, pengecualian dapat dilemparkan, atau kode yang kacau dapat dibaca:
java.nio.charset.malformedInputexception: input panjang = 1 di java.nio.charset.coderResult.throwexception (coderresult.java:281) di sun.nio.cs.streamdecoder.implread (streamDecoder.java.cs.streamdecoder.implread (streamDecoder.java:339) sun.nio.cs.streamdecoder.read (streamDecoder.java:178) di java.io.inputStreamreader.read (inputStreamreader.java:184) di java.io.bufferedreader.fill (bufferedreader.java:161) atbuffereder. java.io.bufferedreader.readline (bufferedreader.java:324) di java.io.bufferedreader.readline (bufferedreader.java:389) di com.coin.test.main (test.java:79)
6) Operasi penulisan file:
coba {bufferedwriter writer = file.newbufferedWriter (paths.get ("c: //my2.ini"), standardcharsets.utf_8); writer.write ("Operasi Tes Write File"); writer.flush (); writer.close ();} catch (ioException e1) {e1.printstacktrace ();}7) melintasi folder:
Path dir = paths.get ("d: // webworkspace"); coba (DirectoryStream <Tath> stream = file.newDirectoryStream (dir)) {for (path e: stream) {System.out.println (e.getFileName ()); }} catch (ioException e) {} Coba (stream <Tath> stream = file.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 (); }Di atas adalah melintasi satu direktori tunggal, itu tidak melintasi seluruh direktori. Anda perlu menggunakan: file.walkfiletree
8) melintasi seluruh direktori file:
public static void main (string [] args) melempar ioException {path startdir = paths.get ("c: //apache-tomcat-8.0.21"); Daftar <path> result = LinkedList baru <Tath> (); File.WalkFiletree (startdir, FindJavisitor baru (hasil)); System.out.println ("result.size () =" + result.size ()); } private static class findJavisitor Extends SimpleFileVisitor <Path> {Private List <Tath> hasil; Publik FindJavisitor (Daftar <Path> hasil) {this.Result = hasil; } @Override public filevisitResult visitfile (file path, basicFileAttributes attrs) {if (file.toString (). Endswith (". Java")) {result.add (file.getFileName ()); } return filevisitresult.continue; }}Mari kita ambil contoh praktis:
public static void main (string [] args) melempar ioException {path startdir = paths.get ("f: // unggah // gambar"); // f: // unggah // gambar // 2 // 20141206 Daftar <Path> result = new LinkedList <Path> (); File.WalkFiletree (startdir, FindJavisitor baru (hasil)); System.out.println ("result.size () =" + result.size ()); System.out.println ("Done."); } private static class findJavisitor Extends SimpleFileVisitor <Path> {Private List <Tath> hasil; Publik FindJavisitor (Daftar <Path> hasil) {this.Result = hasil; } @Override public filevisitResult visitfile (file path, basicFileAttributes attrs) {string filePath = file.tofile (). GetAbsolutePath (); if (filePath.matches (".*_ [1 | 2] {1} //. (? i) (jpg | jpeg | gif | bmp | png)")) {coba {file.deleteifexists (file); } catch (ioException e) {e.printstacktrace (); } result.add (file.getFileName ()); } return filevisitresult.continue; }}Hapus semua gambar yang memenuhi syarat di direktori: filepath.matches (".*_ [1 | 2] {1} //. (? I) (jpg | jpeg | gif | bmp | png)")
public static void main (string [] args) melempar ioException {path startdir = paths.get ("f: // 111111 // unggah // gambar"); // f:/111111 // unggah // gambar // 2 // 20141206 Daftar <TH Path> Hasil = LinkedList baru <Path> (); File.WalkFiletree (startdir, FindJavisitor baru (hasil)); System.out.println ("result.size () =" + result.size ()); System.out.println ("Done."); } private static class findJavisitor Extends SimpleFileVisitor <Path> {Private List <Tath> hasil; Publik FindJavisitor (Daftar <Path> hasil) {this.Result = hasil; } @Override public filevisitResult visitfile (file path, basicFileAttributes attrs) {string filePath = file.tofile (). GetAbsolutePath (); Lebar int = 224; tinggi int = 300; Stringutils.substringbeforeLast (filepath, "."); String newPath = stringutils.substringBeforeLast (filepath, ".") + "_1." + Stringutils.substringafterlast (filepath, "."); coba {imageutil.zoomimage (filepath, newpath, lebar, tinggi); } catch (ioException e) {e.printstacktrace (); return filevisitresult.continue; } result.add (file.getFileName ()); return filevisitresult.continue; }}Menghasilkan thumbnail dari ukuran yang ditentukan untuk semua gambar di direktori. A.JPG menghasilkan a_1.jpg
2. Java.nio.file.file yang kuat
1) Buat direktori dan file:
coba {file.createDirectories (paths.get ("c: // test")); if(!Files.exists(Paths.get("C://TEST"))) Files.createFile(Paths.get("C://TEST/test.txt"));// Files.createDirectories(Paths.get("C://TEST/test2.txt"));} catch (IOException e) { e.printStackTrace();}Perhatikan bahwa direktori kreasi dan file file. Cacreedirectory dan file. CreateFile tidak dapat dicampur. Anda harus memiliki direktori sebelum dapat membuat file di direktori.
2) Salin file:
Salin dari file ke file: file.copy (sumber path, target jalur, opsi copyOption);
Salin dari aliran input ke file: file.copy (inputStream in, path target, opsi copyOption);
Salin dari file ke aliran output: file.copy (sumber path, outputStream out);
coba {file.createDirectories (paths.get ("c: // test")); if (! File.exists (paths.get ("c: // test"))) file.createFile (paths.get ("c: //test/test.txt")); // file.createdirectories (paths.get ("c: //test/test2.txt")); File.copy (paths.get ("c: //my.ini"), system.out); File.copy (paths.get ("c: //my.ini"), paths.get ("c: //my2.ini"), standarcopyoption.replace_existing); File.copy (System.in, paths.get ("c: //my3.ini"), standardcopyoption.replace_existing);} catch (ioException e) {e.printstacktrace ();}3) Iterasi melalui direktori dan folder. Itu telah diperkenalkan di atas: file.newDirectoryStream, file.walkfiletree
4) Baca Properti File:
Path zip = paths.get (uri); System.out.println (file.getLastModifiedTime (ZIP)); System.out.println (file.size (zip)); System.out.println (File.issymbolicLink (ZIP)); System.out.println (file.isDirectory (ZIP)); System.out.println (file.readattributes (zip, "*"));
5) Baca dan atur izin file:
Profil jalur = paths.get ("/home/digdeep/.profile"); POSIXFileAttributes attrs = file.readattributes (profil, posixfileAttributes.class); // izin untuk membaca file set <posixfilePermissions> POSIXPERMISSIONS = attrs.permissions (); posixpermissions.clear (); String owner = attrs.Owner (). GetName (); Perms = POSIXFilePermissions.ToString (POSIXPERMISSIONS); System.out.format ("%s%s%n", pemilik, perms); POSIXPERMISSIONS.ADD (POSIXFILEPERMISSI.OWNER_READ); POSIXPERMISSIONS.ADD (POSIXFILEPERMISSION.GROUP_READ); POSIXPERMISSIONS.ADD (posixfilePermission.others_read); POSIXPERMISSIONS.ADD (POSIXFILEPERMISSI.OWNER_WRITE); File.setPosixFilePermissions (profil, POSIXPERMISSIONS); // Atur izin fileKelas file sangat kuat, dan hampir semua properti terkait file dan direktori memiliki API yang diinginkan untuk didukung. Saya terlalu malas untuk terus memperkenalkannya di sini, silakan merujuk ke dokumentasi JDK8 untuk detailnya.
Contoh praktis:
impor java.io.bufferedReader; import java.io.bufferedwriter; impor java.nio.charset.standardcharsets; impor java.nio.file.file; import java.nio.file.path; impor public static {public {public {public {public {public {public {publict; BufferedReader Reader = file.newbufferedReader (paths.get ("c: //members.sql"), standardcharsets.utf_8); BufferedWriter writer = file.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 ("sebagai datetime)")! = -1) {string newstr = str.substring (0, str.indexOf (", cast (0, 0, 0, 0, 0, 0, str.indexOf (", 0) (0) (0, 0, 0, str.indexOf (”,”) {String newstr = string (0, 0, str.indexOf (", 0, 0, str.indexOf (”) {string (0, 0, 0, str.indexof (”) {string (0, 0, 0, str.indexOf (") writer.write (Newstr); writer.newline (); }} writer.flush (); writer.close (); } catch (Exception e) {E.PrintStackTrace (); }}}Skenario adalah bahwa ketika SQL Server mengekspor data, data akan diekspor ke format biner heksadesimal, seperti: cast (0x0000a2a500fc2e4f sebagai datetime)))
Oleh karena itu, program di atas mengekspor bidang data terakhir, menghapus cast (0x0000A2A500FC2E4F sebagai datetime) untuk menghasilkan skrip SQL baru yang tidak berisi nilai bidang DateTime. Digunakan untuk mengimpor ke MySQL.
Di tengah jalan, sebenarnya ada cara yang lebih baik. Menggunakan SQL Yog dapat mengimpor tabel dan data secara fleksibel di SQL Server ke MySQL. Menggunakan fungsi mengekspor data dari SQL Server sulit ditangani.
Penggunaan di atas (penjelasan terperinci) berdasarkan kelas file java dan kelas jalur adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.