Java:如何读取文本文件

2022-08-31 12:27:05

我想读取包含空格分隔值的文本文件。值是整数。如何读取它并将其放入数组列表中?

下面是文本文件内容的示例:

1 62 4 55 5 6 77

我想把它放在数组列表中作为.我该如何在Java中做到这一点?[1, 62, 4, 55, 5, 6, 77]


答案 1

可以使用 Files#readAllLines() 将文本文件的所有行都放入 .List<String>

for (String line : Files.readAllLines(Paths.get("/path/to/file.txt"))) {
    // ...
}

教程:>文件 I/O 的基本 I/O >读取、写入和创建文本文件


您可以使用 String#split() 根据正则表达式拆分成段。String

for (String part : line.split("\\s+")) {
    // ...
}

教程:数字和字符串>字符串>操作字符串中的字符


可以使用 Integer#valueOf() 将 a 转换为 .StringInteger

Integer i = Integer.valueOf(part);

教程:数字和字符串>字符串>数字和字符串之间的转换


可以使用 List#add() 将元素添加到 .List

numbers.add(i);

教程:列表接口>接口


因此,简而言之(假设文件没有空行或尾随/前导空格)。

List<Integer> numbers = new ArrayList<>();
for (String line : Files.readAllLines(Paths.get("/path/to/file.txt"))) {
    for (String part : line.split("\\s+")) {
        Integer i = Integer.valueOf(part);
        numbers.add(i);
    }
}

如果你碰巧已经使用Java 8,那么你甚至可以使用Stream API,从Files#lines()开始

List<Integer> numbers = Files.lines(Paths.get("/path/to/test.txt"))
    .map(line -> line.split("\\s+")).flatMap(Arrays::stream)
    .map(Integer::valueOf)
    .collect(Collectors.toList());

教程:使用 Java 8 流处理数据


答案 2

Java 1.5 引入了 Scanner 类来处理来自文件和流的输入。

它用于从文件中获取整数,如下所示:

List<Integer> integers = new ArrayList<Integer>();
Scanner fileScanner = new Scanner(new File("c:\\file.txt"));
while (fileScanner.hasNextInt()){
   integers.add(fileScanner.nextInt());
}

检查API。还有更多选项可用于处理不同类型的输入源、不同的分隔符和不同的数据类型。