Java NIO - 檔案



Java NIO 包提供了一個名為 Files 的實用程式 API,它主要用於使用其靜態方法操作檔案和目錄,這些方法主要作用於 Path 物件。

如 Path 教程中所述,Path 介面是在 Java 7 版本中在檔案包中引入 Java NIO 包的。因此,本教程針對的是同一個 File 包。

此類僅包含對檔案、目錄或其他型別的檔案進行操作的靜態方法。在大多數情況下,此處定義的方法將委託給關聯的檔案系統提供程式來執行檔案操作。

Files 類中定義了許多方法,也可以從 Java 文件中讀取。在本教程中,我們嘗試涵蓋了 Java NIO Files 類所有方法中的一些重要方法。

Files 類的重要方法。

以下是 Java NIO Files 類中定義的重要方法。

  • createFile(Path filePath, FileAttribute attrs) − Files 類提供此方法,使用指定的 Path 建立檔案。

示例

package com.java.nio;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class CreateFile {
   public static void main(String[] args) {
      //initialize Path object
      Path path = Paths.get("D:file.txt");
      //create file
      try {
         Path createdFilePath = Files.createFile(path);
         System.out.println("Created a file at : "+createdFilePath);
      } 
      catch (IOException e) {
         e.printStackTrace();
      }
   }
}

輸出

Created a file at : D:\data\file.txt
  • copy(InputStream in, Path target, CopyOption� options) − 此方法用於將指定輸入流中的所有位元組複製到指定的目標檔案,並返回讀取或寫入的位元組數作為長整數值。此引數的 LinkOption 具有以下值:−

    • COPY_ATTRIBUTES − 將屬性複製到新檔案,例如上次修改時間屬性。

    • REPLACE_EXISTING − 如果存在,則替換現有檔案。

    • NOFOLLOW_LINKS − 如果檔案是符號連結,則複製連結本身,而不是連結的目標。

示例

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.List;
public class WriteFile {
   public static void main(String[] args) {
      Path sourceFile = Paths.get("D:file.txt");
      Path targetFile = Paths.get("D:fileCopy.txt");
      try {
         Files.copy(sourceFile, targetFile,
         StandardCopyOption.REPLACE_EXISTING);
      }
      catch (IOException ex) {
         System.err.format("I/O Error when copying file");
      }
      Path wiki_path = Paths.get("D:fileCopy.txt");
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         List<String> lines = Files.readAllLines(wiki_path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      } 
      catch (IOException e) {
         System.out.println(e);
      }
   }	
}

輸出

To be or not to be?
  • createDirectories(Path dir, FileAttribute<?>...attrs) − 此方法用於透過建立所有不存在的父目錄來使用給定的路徑建立目錄。

  • delete(Path path) − 此方法用於從指定的路徑刪除檔案。如果檔案在指定的路徑不存在,或者如果檔案是目錄並且可能不為空且無法刪除,則會丟擲 NoSuchFileException。

  • exists(Path path) − 此方法用於檢查檔案是否存在於指定的路徑,如果檔案存在,則返回 true,否則返回 false。

  • readAllBytes(Path path) − 此方法用於讀取給定路徑下檔案的所有位元組,並返回包含從檔案讀取的位元組的位元組陣列。

示例

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class ReadFile {
   public static void main(String[] args) {
      Path wiki_path = Paths.get("D:file.txt");
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         List<String> lines = Files.readAllLines(wiki_path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      } 
      catch (IOException e) {
         System.out.println(e);
      }
   }	
}

輸出

Welcome to file.
  • size(Path path) − 此方法用於獲取以位元組為單位的指定路徑下檔案的大小。

  • write(Path path, byte[] bytes, OpenOption� options) − 此方法用於將位元組寫入指定路徑下的檔案。

示例

package com.java.nio;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
public class WriteFile {
   public static void main(String[] args) {
      Path path = Paths.get("D:file.txt");
      String question = "To be or not to be?";
      Charset charset = Charset.forName("ISO-8859-1");
      try {
         Files.write(path, question.getBytes());
         List<String> lines = Files.readAllLines(path, charset);
         for (String line : lines) {
            System.out.println(line);
         }
      } 
      catch (IOException e) {
         System.out.println(e);
      }
   }
}

輸出

To be or not to be?
廣告