Java 11 特性 - java.nio.file.Files 类新方法 | 从文件中读/写一个字符串

599 阅读3分钟

Java 11 Features - java.nio.file.Files class new Methods

在这篇博文中,我们将学习添加到java.nio.file.Files 类中的新方法。

什么是java.nio.file.Files类在java11中?

这个类用于对文件系统的文件和目录进行操作。

它提供了各种静态方法来进行操作。

在Java 11中,Files类增加了以下方法,用于将文件内容转换为/从字符串。

它引入了以下Java 11 Files的新方法:

  • String Files.readString(Path path)
  • String Files.readString(Path, Charset)
  • Path Files.write(Path, CharSequence, OpenOption...)
  • Path Files.write(Path, CharSequence, Charset, OpenOption...)

通过这些方法,我们可以实现以下事情:

  • 如何从文件中读取一个字符串
  • 如何将一个字符串写进文件

这些是处理文件系统时常用的操作。

如何在java11之前从文件中读取字符串内容?

这个例子解释了如何读取一个文件的内容。首先,使用readAllBytes 方法从文件中读取所有字节,该方法返回字节数组。接下来,用字节数组作为字符串构造函数的参数,将其转换为字符串。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Files1 {
    public static void main(String[] args) {
        // First Create a Path Object  
        Path path = Paths.get("b://files1.txt");
        //Create a file  
        try {
            byte[] bs = Files.readAllBytes(path);
            System.out.println(new String(bs));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
} 

输出:

This is test content  

如上所示,我们从文件中读取字节并将其转换为字符串方法。

另外,也可以使用readString() 方法完成同样的工作。

使用readString()方法从文件中读取内容

该方法读取一个文件的所有内容并以字符串形式返回。

它还包含一个重载方法,用于将字节解码为字符的Charset。

这个方法在以下情况下会抛出异常。

  • java.nio.file.NoSuchFileException: 如果文件在文件系统中不存在
  • java.io.IOException:在传输文件到String的IO操作中抛出此异常。
  • java.lang.OutOfMemoryError:当文件大小较大时,如2GB的文件大小,会抛出这个异常。
  • java.lang.SecurityException:当访问文件时出现权限访问问题时抛出此异常 语法。

这里有一个语法

 public static String readString(Path path) throws IOException   
 public static String readString(Path path, Charset cs) throws IOException 

下面是一个例子,解释了关于

  • 将文件内容读成一个字符串
  • 使用UTF-8解码将文件内容读成字符串
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Files1 {
    public static void main(String[] args) {
        // First Create a Path Object  
        Path path = Paths.get("b://files1.txt");
        //Read a file  
        try {
            String string = Files.readString(path);
            System.out.println(string);
            String string1 = Files.readString(path,StandardCharsets.UTF_8);
            System.out.println(string1);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}  

输出:

Test content from a file  
Test content from a file  

如何使用writeString()方法将一个字符串写入文件?

该方法用于向文件系统中的文件写入字符串。

该方法在以下情况下会抛出异常java.lang.IllegalArgumentException- 当提供无效的选项时,会抛出这个异常。

  • java.io.IOException:在IO操作过程中,当向文件写入字符串时出现错误,会抛出这个异常。
  • java.lang.UnsupportedOperationException:当提供不支持的操作时,会抛出这个异常。
  • java.lang.SecurityException:当访问文件时出现权限访问问题时抛出该异常。

以下是一个签名

public static Path writeString(Path path, CharSequence csq, OpenOption... options) throws IOException  
public static Path writeString(Path path, CharSequence csq, Charset cs, OpenOption... options)  

例子:

这个例子显示,如何使用UTF-8解码将一个字符串写入文件中。

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Files1 {
    public static void main(String[] args) {
        // First Create a Path Object  
        Path path = Paths.get("b://files1.txt");
        CharSequence sequenceString = "new string adding content in to a file";

        //Read a file  
        try {
            Path newPath= Files.writeString(path,sequenceString);
            String string1 = Files.readString(newPath,StandardCharsets.UTF_8);
            System.out.println(string1);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}  

输出:

new string adding content into a file  

结论

学习了java 11版本中引入的新的Files方法和例子。