10. 新的檔案處理類別

10.1 Path

Path可用來建立檔案及目錄的路徑,可視為是java.io.File的升級版。


Path p = Paths.get("\\opt\\jpgTools\\README.txt");
System.out.println(p.getParent()); // \opt\jpgTools
System.out.println(p.getRoot()); // \
System.out.println(p.getNameCount()); // 3
System.out.println(p.getName(0)); // opt
System.out.println(p.getName(1)); // jpgTools
System.out.println(p.getFileName()); // README.txt
System.out.println(p.toString()); // 完整路徑

Path還有一些其它方法:

path.toUri() 將path物件轉換為URI物件

path.resolve(Path) 結合路徑

path.relativize(Path) 取得相對路徑

path.compareTo(Path) 比較路徑

10.2 Files

Files可用來讀取(小檔案)、寫入(小檔案)、建立、檢查、刪除、複製或搬移檔案或目錄。


// 建立目錄
Files.createDirectories("\\opt\\jpg");

// 建立Path物件
Path target1 = Paths.get("\\opt\\jpg\\README1.txt");
Path p1 = Files.createFile(target1);
Path target2 = Paths.get("\\opt\\jpg\\README2.txt");
Path p2 = Files.createFile(target2);
Path p3 = Paths.get("\\opt\\jpg");
Path p4 = Paths.get("\\opt");

// 檢物檔案屬性
System.out.println(Files.isReadable(p1));
System.out.println(Files.isReadable(p2));
System.out.println(Files.isExecutable(p1));
System.out.println(Files.isSymbolicLink(p1));
System.out.println(Files.isWritable(p1));
System.out.println(Files.isHidden(p1));
System.out.println(Files.isSameFile(p1, p2));

//讀取、寫入
Stream<String> lines = Files.lines(p1);
byte[] bytes = Files.readAllByte(p2);
String content = new String(bytes, StandardCharset.UTF_8);
List<String> lines = Files.readAllLines(p1);
Files.write(p2, content.getBytes(StandardCharset.UTF_8));
Files.write(p2, lines, StandardOpenOption.APPEND);
Stream<Path> entries = Files.list(p3); //讀取目錄
Stream<Path> entries = Files.walk(p4); //讀取目錄樹

// 刪除、搬移、複製
Files.delete(p2);
System.out.println(Files.move(p1, p2));
System.out.println(Files.copy(p2, p1));
Files.delete(p1);
Files.delete(p2);
Files.deleteIfExists(p2);