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?
广告