NIO學習:Paths和Files工具類的使用
JDK1.7引入了新的IO操作類。在java.nio.file包下,Java NIO Path接口和Files類。
- Path接口:Path表示的是一個目錄名序列,其后還可以跟着一個文件名,路徑中第一個部件是根部件時就是絕對路徑。
-
例如:/或C:/。而允許訪問的根部件取決於文件系統。
-
以根部件開始的路徑是絕對路徑,否則就是相對路徑。
-
靜態的Paths.get方法接受一個或多個字符串,字符串之間自動使用默認文件系統的路徑分隔符連接起來(Unix是/,Windows是\),這就解決了跨平台的問題。接着解析連接起來的結果,如果不是合法路徑就拋出InvalidPathException異常,否則就返回一個Path對象。
-
Files工具類:提供了更方便更高效的對文件進行讀寫的操作方法。
-
1、讀寫文件
-
static Path write(Path path, byte[] bytes, OpenOption...Options):寫入文件
-
static byte[] readAllBytes(Path path):讀取文件中的所有字節。
代碼示例
import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption;
public class PathFilesDemo {
public static void main(String[] args) {
createFileOrDir();
}
// 創建文件或目錄
private static void createFileOrDir() {
try {
// 創建新目錄,除了最后一個部件,其他必須是存在的
Files.createDirectory(Paths.get("F:/test"));
// 創建路徑中的中間目錄,能創建不存在的中間部件
Files.createDirectories(Paths.get("F:/test/test"));
// 創建文件
Files.createFile(Paths.get("F:/testbak.txt"));
} catch (IOException e) {
e.printStackTrace();
}
}// createFileOrDir
// 刪除文件
private static void deleteFile() {
Path p = Paths.get("F:/test.txt");
try {
Files.delete(p);// 用static boolean deleteIfExists(Path path)方法比較好
System.out.println("刪除成功");
} catch (IOException e) {
e.printStackTrace();
}
}// deleteFile
// 移動文件
private static void moveFile() {
Path pSrc = Paths.get("F:/test.txt");
Path pDest = Paths.get("E:/test.txt");
try {
Files.move(pSrc, pDest, StandardCopyOption.REPLACE_EXISTING);
System.out.println("移動成功");
} catch (IOException e) {
e.printStackTrace();
}
}// moveFile
// 復制文件
private static void copyFile() {
Path pSrc = Paths.get("F:/test.txt");
Path pDest = Paths.get("F:/testbak.txt");
try {
Files.copy(pSrc, pDest, StandardCopyOption.REPLACE_EXISTING);
System.out.println("復制成功");
} catch (IOException e) {
e.printStackTrace();
}
}// copyFile
// 從文件讀取數據
private static void readFromFile() {
Path p = Paths.get("F:/", "test.txt");
try {
byte[] bytes = Files.readAllBytes(p);
System.out.println(new String(bytes));
} catch (IOException e) {
e.printStackTrace();
}
}
// 向文件寫入數據
private static void write2File() {
// 獲得路徑
Path p = Paths.get("F:/", "test.txt");
String info = "I love java really,你喜歡什么?";
try {
// 向文件中寫入信息
Files.write(p, info.getBytes("utf8"), StandardOpenOption.APPEND);
System.out.println("寫入成功");
} catch (IOException e) {
e.printStackTrace();
}
}// write2File
// 獲得文件路徑的幾種方法
private static void getFilePath() {
File file = new File("F:/test.txt");
// Path
Path p1 = Paths.get("F:/", "test.txt");// F:\test.txt
System.out.println(p1);
Path p2 = file.toPath();
System.out.println(p2);
Path p3 = FileSystems.getDefault().getPath("F:/", "test.txt");
System.out.println(p3);
}// getFilePath
}