Java Nio 简明教程

Java NIO - File

Java NIO 包提供了另一个实用程序 API 名为 Files,它基本上用于使用其主要用于 Path 对象的静态方法操作文件和目录。

如 Path 教程中所述,Path 接口是在 Java 7 版本的文件包中引入 Java NIO 包的。因此,此教程适用于相同的文件包。

此类完全包含对文件、目录或其他类型文件进行操作的静态方法。在大多数情况下,此处定义的方法会委托给关联的文件系统提供程序以执行文件操作。

在 Files 类中定义了许多方法,也可以从 Java 文档中读取这些方法。在本教程中,我们尝试涵盖 Java NIO Files 类所有方法中的一些重要方法。

Important methods of Files class.

以下是 Java NIO Files 类中定义的重要方法。

  1. createFile(Path filePath, FileAttribute attrs) - Files 类提供了此方法来使用指定路径创建文件。

Example

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();
      }
   }
}

Output

Created a file at : D:\data\file.txt
  1. copy(InputStream in, Path target, CopyOption� options) - 此方法用于将指定输入流中的所有字节复制到指定目标文件,并以长值形式返回读取或写入的字节数。该参数的 LinkOption 具有以下值:

Example

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);
      }
   }
}

Output

To be or not to be?
  1. createDirectories(Path dir, FileAttribute&lt;?&gt;&#8230;&#8203;attrs) - 此方法用于通过创建所有不存在的父目录来使用给定路径创建目录。

  2. delete(Path path) - 此方法用于从指定路径删除文件。如果文件不存在于指定路径或文件是目录且可能不为空并且无法删除,则抛出 NoSuchFileException。

  3. exists(Path path) - 此方法用于检查文件是否存在于指定路径,如果文件存在,则返回 true,否则返回 false。

  4. readAllBytes(Path path) - 此方法用于从给定路径的文件中读取所有字节,并返回一个包含从文件中读取的字节的字节数组。

Example

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);
      }
   }
}

Output

Welcome to file.
  1. size(Path path) - 此方法用于以字节为单位获取指定路径处文件的大小。

  2. write(Path path, byte[] bytes, OpenOption� options) - 此方法用于将字节写入指定路径的文件。

Example

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);
      }
   }
}

Output

To be or not to be?