Java java.nio.file.Files readAllLines() 方法

Java File Java java.nio.file.Files

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() 方法可能抛出以下异常:

  1. IOException - 如果发生 I/O 错误(如文件不存在)
  2. SecurityException - 如果没有足够的权限访问文件

建议在使用时进行异常处理:

实例

try {
    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());
        }
    }
}

示例 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());
        }
    }
}

注意事项

  1. 文件大小:此方法会一次性读取整个文件到内存中,不适合处理非常大的文件(如超过几百MB的文件)
  2. 字符编码:确保使用正确的字符集,否则可能导致乱码
  3. 行结束符:不同操作系统使用不同的行结束符(Windows 使用 \r\n,Unix/Linux 使用 \n),但 readAllLines() 会正确处理这些差异
  4. 性能考虑:对于大文件,考虑使用 BufferedReaderlines() 方法进行流式处理

替代方案

如果需要处理大文件,可以考虑以下替代方法:

实例

try (Stream<String> stream = Files.lines(path)) {
    stream.forEach(System.out::println);
} catch (IOException e) {
    e.printStackTrace();
}

这种方法使用流式处理,不会一次性加载整个文件到内存中。


总结

Files.readAllLines() 是一个简单易用的方法,适合读取小型文本文件。它提供了便捷的方式来获取文件的所有行内容,但在处理大文件时需要注意内存消耗问题。根据实际需求选择合适的文件读取方式,可以大大提高程序的效率和稳定性。

Java File Java java.nio.file.Files