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

357 阅读3分钟

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

这个类用于对文件系统的文件和目录进行操作。它提供了各种静态方法来进行操作。

在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...)

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

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

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

在Java 11之前,从文件中读取字符串内容

这个例子解释了如何读取文件的内容 首先使用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();  
    }  
   }  
 } 

正如我们所看到的,我们如何从文件中读取并将字节转换成字符串方法。同样可以通过readString()方法来完成。

readString()方法

该方法读取文件的所有内容并以字符串形式返回。它还包含一个重载方法,用于将字节解码为字符的Charset。

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

  • java.io.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 in to a file