Java NIO - File(文件)

  • 简述

    Java NIO包提供了另一个名为Files的实用程序API,它基本上用于使用其静态方法操作文件和目录,这些方法主要适用于Path对象。
    Path 教程中所述,路径接口是在 Java 7 版本的文件包中引入的 Java NIO 包中。因此,本教程适用于相同的文件包。
    此类仅由对文件、目录或其他类型的文件进行操作的静态方法组成。在大多数情况下,此处定义的方法将委托给关联的文件系统提供程序来执行文件操作。
    在 Files 类中定义了许多方法,这些方法也可以从 Java 文档中读取。在本教程中,我们试图涵盖 Java NIO 文件类的所有方法中的一些重要方法。
  • 文件类的重要方法。

    以下是在 Java NIO 文件类中定义的重要方法。
    • createFile(Path filePath, FileAttribute attrs) − 文件类提供此方法,以使用指定的路径创建文件。
  • 
    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) − 此方法用于将指定输入流中的所有字节复制到指定的目标文件,并返回读取或写入的字节数作为长值。链接选择具有以下值的此参数 −
      • 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?