日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nio2 java_java NIO2(file io)

發布時間:2025/4/5 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nio2 java_java NIO2(file io) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Technorati 標簽: java,nio2

一、Path 類

從 java 7 開始引進了一個類 Path,可以想當然地認為這個類就是為操作路徑而誕生的。Path 對象包含了其對應的文件名和目錄列表,可以用來檢索、定位和操作文件。

1、創建一個Path 對象

可以使用輔助類輔助類 Paths.get()方法獲取一個 Path 對象(注意輔助類是 Paths ),Demo:

Path p1 = Paths.get("/tmp/foo");

Path p2 = Paths.get(filename);

Path p3 = Paths.get(URI.create("C://File.java"));

方法 Paths.get()可以看成下面的縮寫:

Path path = FileSystems.getDefault().getPath("C:\\File.java");

2、提取 Path 對象的信息

Path path = Paths.get("D:\\Program Files\\Java\\text.txt");

System.out.format("toString: %s%n", path.toString()); //D:\Program Files\Java\text.txt

System.out.format("getFileName: %s%n", path.getFileName()); //text.txt

System.out.format("getName(0): %s%n", path.getName(0)); //Program Files

System.out.format("getNameCount: %d%n", path.getNameCount()); //3

System.out.format("subpath(0,2): %s%n", path.subpath(0,2)); // Program Files\Java

System.out.format("getParent: %s%n", path.getParent()); // D:\Program Files\Java

System.out.format("getRoot: %s%n", path.getRoot()); //D:\

Path 同樣可以是想對象路勁,如下:

Path path = Paths.get(“\\java\\text.txt”);

3、Path 的轉換

(1)將 path 轉換為 uri,使用Path.toUri() 方法,如下:

Path path = Paths.get("\\Java\\text.txt");

System.out.format("%s%n", path.toUri());

//輸出:file:///I:/Java/text.txt

(2)toAbsolutePath 轉換為絕對路徑,如下:

Path path = Paths.get("\\Java\\text.txt");

System.out.format("%s%n", path.toAbsolutePath());

//輸出:I:\Java\text.txt

(3)toFile() 轉換為文件,如下:

Path path = Paths.get("D:\\Program Files\\Java\\text.txt");

File filePath = path.toFile();

System.out.format("%s%n",filePath);

System.out.format("fileExist? %b%n",filePath.exists());

//輸出:D:\Program Files\Java\text.txt

//fileExist? true

4、連接兩個 path

(1)當被連接的 path 不包含的根路徑時,會直接將此 path 連接到原 path 后面,如下:

Path path = Paths.get("D:\\Program Files\\Java");

System.out.format("%s%n",path.resolve("other.txt"));

//輸出:D:\Program Files\Java\other.txt

//注意:這里并沒有創建 other.txt這個文件

(2)當被連接的 path 包含根路徑時,resolve()h會返回此 path 對象,如下:

Path path = Paths.get("java").resolve("D:\\Program Files");

System.out.format("%s%n",path);

//輸出:D:\Program Files

5、在兩個 path 之間創建它們的路徑

有時候我們需要知道兩個文件夾之間的路徑,如下:

Path p1 = Paths.get("jdk1.7.0_40");

Path p2 = Paths.get("java");

Path p1_to_p2 = p1.relativize(p2);//..\java

Path p2_to_p1 = p1_to_p2.relativize(p1);//..\..\jdk1.7.0_40

6、比較兩個 path

Path 對象支持使用 equals()方法來判斷兩個path 是否一致,也可以使用 startWith() 和 endWith() 來判斷path 是否以 指定字符串開始或結束。如下:

Path path = ...;

Path otherPath = ...;

Path beginning = Paths.get("/home");

Path ending = Paths.get("java");

if (path.equals(otherPath)) {

} else if (path.startsWith(beginning)) {

// 以“/home”開始的path

} else if (path.endsWith(ending)) {

// 以 “java” 結束的 path

}

二、文件操作

當存在一個 path 對象時,需要判斷這個 path 對應的文件(或目錄)是否存在,是否可讀,是否可寫??

...

1、判斷文件/目錄 是否存在

可以使用方法 exists(Path, LinkOption...) 和 notExists(Path, LinkOption...) 來判斷文件/目錄是否存在。值得引起注意的一件事是,!Files.exist(path) 并與 Files.exist(path) 等同,因為當你在測試一個文件/目錄是否存在時,有可能出現以下三種結果:

(1)文件/目錄 確認存在

(2)文件/目錄 確認不存在

(3)無法判斷文件/目錄是否存在,這種情況會出在在程序無權訪問指定文件/目錄 時。

當 exists()和 notExists()都返回 false,無法判斷指定文件/目錄 是否存在。

2、檢查文件的訪問權

使用 isReadable(Path), isWritable(Path), 和 isExecutable(Path) 方法,可以判斷出文件是否可以被訪問。如下代碼,判斷文件是否可以執行:

Path file = ...;

boolean isRegularExecutableFile = Files.isRegularFile(file) & Files.isReadable(file) & Files.isExecutable(file);

3、判斷兩個 path 是否為同一文件/目錄

使用 isSameFile(Path, Path) 判斷是否為同一文件/目錄,如下:

Path p1 = ...;

Path p2 = ...;

if (Files.isSameFile(p1, p2)) {

...

}

4、刪除 文件/目錄

(1)使用 delete(path)方法可以刪除一個文件/目錄,如果刪除失敗,會判處一個 IO 異常。如,當文件不存在時,會拋出 NoSuchFileException,如下:

try {

Files.delete(path);

} catch (NoSuchFileException x) {

System.err.format("%s: no such" + " file or directory%n", path);

} catch (DirectoryNotEmptyException x) {

System.err.format("%s not empty%n", path);

} catch (IOException x) {

// 在此捕捉無權操作文件異常

System.err.println(x);

}

(2)使用 deleteIfExists(Path) 同樣可以刪除文件/目錄,不過此方法不會拋出異常

5、復制文件/目錄

可以使用方法 copy(Path, Path, CopyOption...) 復制一個文件/目錄,除非指定了 REPLACE_EXISTING ,否則當目標文件已存在是,復制都會失敗。

另外當復制目錄時,并不會復制其內的文件,換言之,無論被復制的目錄里有多少文件,新復制出來的為目錄都是空的。

當復制一個快捷方式時,會復制這個快捷方式對應的文件。如果只是想復制快捷方式本事,可以指定 CopyOption 為 REPLACE_EXISTING? 或者 NOFOLLOW_LINKS。

CopyOption 支持一下枚舉變量:

(1)REPLACE_EXISTING? 復制和替換已存在的文件

(2)COPY_ATTRIBUTES 將原文件的文件屬性復制給目標文件。

(3)NOFOLLOW_LINKS 只是復制快捷方式本身。

如下演示了如何使用 copy(Path, Path, CopyOption...) :

import static java.nio.file.StandardCopyOption.*;

...

Files.copy(source, target, REPLACE_EXISTING);

另外,在 Files 里,也定義其他方法,用來處理 流與文件 之間的復制。方法 copy(InputStream, Path, CopyOptions...) 可以將輸入的任意的 字節流飛復制到一個文件里;方法 copy(Path, OutputStream) 可以將任意文件以字節的形式復制到一個輸出流里。

6、移動文件/目錄

可以使用方法 move(Path, Path, CopyOption...) 移動文件/目錄,除非指定了 CopyOption 為 REPLACE_EXISTING ,否則當目標文件已存在時,移動失敗。

使用模板如下:

import static java.nio.file.StandardCopyOption.*;

...

Files.move(source, target, REPLACE_EXISTING);

7、操作文件的屬性

因為不同的操作系統,支持的文件屬性與操作方式不一致,在這里只是演示一下如何獲取基本的文件屬性。

public class FileIoTest {

public static void main(String[] args) throws IOException {

Path path = Paths.get("D:\\Program Files\\Java");

BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class);

System.out.println("creationTime: " + attr.creationTime());

System.out.println("lastAccessTime: " + attr.lastAccessTime());

System.out.println("lastModifiedTime: " + attr.lastModifiedTime());

System.out.println("isDirectory: " + attr.isDirectory());

System.out.println("isOther: " + attr.isOther());

System.out.println("isRegularFile: " + attr.isRegularFile());

System.out.println("isSymbolicLink: " + attr.isSymbolicLink());

System.out.println("size: " + attr.size());

}

}

總結

以上是生活随笔為你收集整理的nio2 java_java NIO2(file io)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。