Java java.nio.file.Files
readAllLines()
方法
readAllLines()
方法用于从文件中读取所有行内容,并将其作为 List<String>
返回。
readAllLines()
方法有两个重载版本:
public static List<String> readAllLines(Path path) throws IOException public static List<String> readAllLines(Path path, Charset cs) throws IOException
第一个版本使用默认字符集(UTF-8)读取文件,第二个版本允许指定字符集。
参数说明
Path path
- 类型:
java.nio.file.Path
- 描述:要读取的文件路径对象
- 示例:
Path filePath = Paths.get("example.txt");
Charset cs
(可选参数)
- 类型:
java.nio.charset.Charset
- 描述:用于解码文件内容的字符集
- 常用字符集:
StandardCharsets.UTF_8
StandardCharsets.ISO_8859_1
StandardCharsets.US_ASCII
- 示例:
Charset charset = StandardCharsets.UTF_8;
返回值
- 类型:
List<String>
- 描述:包含文件所有行的列表,每个元素代表文件中的一行
- 注意:
- 行分隔符(如
\n
或\r\n
)不会被包含在返回的字符串中 - 如果文件为空,返回空列表
- 列表顺序与文件中的行顺序一致
- 行分隔符(如
异常处理
readAllLines()
方法可能抛出以下异常:
IOException
- 如果发生 I/O 错误(如文件不存在)SecurityException
- 如果没有足够的权限访问文件
建议在使用时进行异常处理:
实例
try {
List<String> lines = Files.readAllLines(path);
// 处理读取的内容
} catch (IOException e) {
e.printStackTrace();
// 处理异常情况
}
List<String> lines = Files.readAllLines(path);
// 处理读取的内容
} catch (IOException e) {
e.printStackTrace();
// 处理异常情况
}
使用示例
示例 1:基本用法
实例
import java.nio.file.*;
import java.util.List;
public class ReadFileExample {
public static void main(String[] args) {
Path filePath = Paths.get("example.txt");
try {
List<String> lines = Files.readAllLines(filePath);
// 打印文件内容
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
System.err.println("读取文件出错: " + e.getMessage());
}
}
}
import java.util.List;
public class ReadFileExample {
public static void main(String[] args) {
Path filePath = Paths.get("example.txt");
try {
List<String> lines = Files.readAllLines(filePath);
// 打印文件内容
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
System.err.println("读取文件出错: " + e.getMessage());
}
}
}
示例 2:指定字符集
实例
import java.nio.file.*;
import java.nio.charset.StandardCharsets;
import java.util.List;
public class ReadFileWithCharset {
public static void main(String[] args) {
Path filePath = Paths.get("example.txt");
try {
List<String> lines = Files.readAllLines(filePath, StandardCharsets.UTF_8);
// 处理文件内容
lines.forEach(System.out::println);
} catch (IOException e) {
System.err.println("读取文件出错: " + e.getMessage());
}
}
}
import java.nio.charset.StandardCharsets;
import java.util.List;
public class ReadFileWithCharset {
public static void main(String[] args) {
Path filePath = Paths.get("example.txt");
try {
List<String> lines = Files.readAllLines(filePath, StandardCharsets.UTF_8);
// 处理文件内容
lines.forEach(System.out::println);
} catch (IOException e) {
System.err.println("读取文件出错: " + e.getMessage());
}
}
}
注意事项
- 文件大小:此方法会一次性读取整个文件到内存中,不适合处理非常大的文件(如超过几百MB的文件)
- 字符编码:确保使用正确的字符集,否则可能导致乱码
- 行结束符:不同操作系统使用不同的行结束符(Windows 使用
\r\n
,Unix/Linux 使用\n
),但readAllLines()
会正确处理这些差异 - 性能考虑:对于大文件,考虑使用
BufferedReader
和lines()
方法进行流式处理
替代方案
如果需要处理大文件,可以考虑以下替代方法:
实例
try (Stream<String> stream = Files.lines(path)) {
stream.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
stream.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
这种方法使用流式处理,不会一次性加载整个文件到内存中。
总结
Files.readAllLines()
是一个简单易用的方法,适合读取小型文本文件。它提供了便捷的方式来获取文件的所有行内容,但在处理大文件时需要注意内存消耗问题。根据实际需求选择合适的文件读取方式,可以大大提高程序的效率和稳定性。
点我分享笔记