当前位置: 首页 > 面试题库 >

Java:如何读取文本文件

劳和雅
2023-03-14
问题内容

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

这是文本文件内容的示例:

1 62 4 55 5 6 77

我想将它包含在arraylist中[1, 62, 4, 55, 5, 6, 77]。如何用Java做到这一点?


问题答案:

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

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

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

你可以用来基于正则表达式String#split()拆分a String部分。

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

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

你可以使用Integer#valueOf()将转换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 APIFiles#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());


 类似资料:
  • 我试图通过创建一个函数来编写一个简单的文本文件阅读器,该函数接受文件的路径并将每行文本转换为char数组,但它不起作用。 这里出了什么问题? 从以前的修订版更改了一点代码后,这似乎仍然不起作用,现在它给我一个异常101。 我在Firefox上测试过这个功能,它可以工作,但在Google Chrome上它就是不工作,它一直给我一个异常101。我如何让它不仅适用于Firefox,还适用于其他浏览器(尤

  • 问题内容: 如何从Java中classpath读取文本文件? 问题答案: 在类路径上的目录中,从同一类加载器加载的类中,你应该能够使用以下任一种: 如果这些都不起作用,则表明还有其他问题。 因此,例如,使用以下代码: 而这个目录结构: 然后(使用Linux机器上的Unix路径分隔符): 结果:

  • 问题内容: 我正在尝试通过创建一个接受文件路径并将文本的每一行转换为char数组的函数来编写一个简单的文本文件阅读器,但是它不起作用。 这是怎么了? 从先前的版本中稍稍更改了代码后,这似乎仍然不起作用,现在给了我一个例外101。 我已经在Firefox上对其进行了测试,并且可以工作,但是在Google Chrome中它却无法工作,并且一直给我一个异常101。如何使它不仅可以在Firefox上而且还

  • 可以使用FileReader直接读取文本文件 我们为什么需要使用InputStream方法

  • 问题内容: 我需要使用Java逐行读取大约5-6 GB的大型文本文件。 我如何快速做到这一点? 问题答案: 常见的模式是使用 如果你假设没有字符编码,则可以更快地读取数据。例如ASCII-7,但差别不大。你处理数据的时间很可能会花费更长的时间。 一种不太常用的模式,可以避免line泄漏的范围。 在Java 8中,你可以执行

  • 问题内容: 我想读取不同块的日志文件,以使其成为多线程。该应用程序将在具有多个硬盘的服务器端环境中运行。读取成块后,应用程序将处理每个块的每一行。 我已经用bufferedreader完成了对每个文件行的读取,并且可以通过将RandomAccessFile与MappedByteBuffer结合使用来制作文件块,但是将这两者结合起来并不容易。 问题在于该块正好切入我块的最后一行。我从来没有块的最后一