java 中 files.readstring() 和 files.writestring() 是 java nio.2 提供的便捷方法,用于一次性将文件内容读取为字符串或将字符串写入文件。使用这两个方法时,必须指定目标 path 和字符集(如 standardcharsets.utf_8),它们会自动处理文件的打开、读写和关闭操作,非常适合处理小文本文件。

readString() 读取文件的具体实现与异常处理
调用 Files.readString(path, charset) 可以直接获取文件的全部内容。该方法会尝试打开文件并读取所有字节,然后根据指定的字符集解码为字符串。如果文件不存在或没有读取权限,会抛出 IOException;如果文件过大导致内存不足,则可能抛出 OutOfMemoryError。因此,在实际使用中,通常建议先检查文件是否存在,并使用 try-with-resources 之外的简单调用方式,因为该方法内部已管理资源。

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.charset.StandardCharsets;
import java.io.IOException;
public class ReadExample {
public static void main(String[] args) {
Path path = Path.of("data.txt");
try {
String content = Files.readString(path, StandardCharsets.UTF_8);
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
writeString() 写入文件的具体实现与覆盖行为
调用 Files.writeString(path, content, options) 可以将字符串写入文件。默认情况下,如果文件已存在,它会被覆盖。如果需要追加内容,可以传入 StandardOpenOption.APPEND 选项。同样,该方法会自动处理字符编码和文件关闭。如果父目录不存在,写入操作会失败并抛出 NoSuchFileException,因此确保目录存在或使用 Files.createDirectories() 是必要的预处理步骤。

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.charset.StandardCharsets;
import java.nio.file.StandardOpenOption;
import java.io.IOException;
public class WriteExample {
public static void main(String[] args) {
Path path = Path.of("output.txt");
String text = "Hello, World!";
try {
// 覆盖写入
Files.writeString(path, text, StandardCharsets.UTF_8);
// 追加写入示例:Files.writeString(path, "\nMore", StandardCharsets.UTF_8, StandardOpenOption.APPEND);
} catch (IOException e) {
e.printStackTrace();
}
}
}
基于大文件输入时的内存溢出问题
当使用 Files.readString() 读取非常大的文件时,整个文件内容会被加载到内存中形成一个巨大的 String 对象。这会导致 OutOfMemoryError。对于大文件,应改用 Files.lines() 或 BufferedReader 进行流式处理,而不是一次性读取。例如,处理 GB 级别的日志文件时,readString 是不可用的,必须采用逐行或分块读取的策略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











