java 8 引入的 java.nio.file.files 类提供了读取文件为字符串的最简方式,核心方法是 files.readstring()。调用该方法并传入目标 path 对象即可直接获取文件内容,无需手动管理流或指定字符集(默认 utf-8)。若需处理特定编码或大文件,可改用 files.readallbytes() 配合 new string() 构造器。

readString() 方法的具体用法与参数设置
使用 Files.readString() 时,必须提供 Path 作为输入源。该方法内部会自动打开文件、读取所有字节并按指定编码转换为字符串,最后关闭文件。如果文件不存在会抛出 NoSuchFileException,如果路径是目录则抛出 DirectoryIteratorException。对于小文件,这是最推荐的做法,因为它代码简洁且内存占用可控。

import java.nio.file.Files;
import java.nio.file.Path;
import java.io.IOException;
public class FileReadExample {
public static void main(String[] args) {
Path path = Path.of("data.txt");
try {
// 直接读取为字符串,默认 UTF-8 编码
String content = Files.readString(path);
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
不同编码下的读取差异与异常处理
当文件编码非 UTF-8 时,readString() 需要显式传入 Charset 参数。例如读取 GBK 编码文件需使用 StandardCharsets.GBK。若未正确指定编码,中文等字符会出现乱码。此外,若文件过大导致内存不足,应使用 Files.lines() 进行流式处理,但本题聚焦于全量读取为字符串的场景,因此主要关注编码匹配问题。

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.charset.StandardCharsets;
import java.io.IOException;
public class FileReadGBK {
public static void main(String[] args) {
Path path = Path.of("gbk_data.txt");
try {
// 指定 GBK 编码读取
String content = Files.readString(path, StandardCharsets.GBK);
System.out.println(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}
读取空文件或超大文件的实际行为
当文件为空时,Files.readString() 返回空字符串 "",而非 null。这符合 Java IO 惯例,便于后续字符串操作。对于超大文件(如超过堆内存大小),该方法会抛出 OutOfMemoryError。此时应切换至 BufferedReader 逐行读取。在实际开发中,建议先通过 Files.size() 检查文件大小,再决定读取策略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











