使用Java新I/O读取行

3

如何使用New I/O从文件中读取一行?

我只能逐字节地读取。

有什么建议吗?


6
你尝试过什么?哪些方法有效?哪些方法无效? - Piskvor left the building
1
定义“最佳”...是指最快的,最易于理解/维护的,最具可移植性的,最强大的,最响应灵敏的...? - Bohemian
3个回答

4

对于小文件,您可以这样做:

List<String> smallFilesLines =  Files.readAllLines(  
FileSystems.getDefault().getPath("smallFile.txt"), StandardCharsets.UTF_8);  

for (String oneLine : smallFilesLines) {
   System.out.println(oneLine); 
}

2

BufferedReader 的 readline() 方法应该足够了。否则,您需要读取任意数量的字节并解析换行符 '\n' 或 '\r\n'(如果是 Windows 样式的行尾)。


谢谢你的回答。正是我想知道的。 - Rafael Orágio

2
你是在提到Java 5.0中引入的NIO,还是在提到Java 7中添加的异步NIO?
简而言之,使用BufferedReader更加简单,速度也不会慢太多。
如果你必须使用ByteBuffer,或者你想要更好的性能,那么你必须逐字节读取。(并且你需要处理只读取了部分行时的情况,这样你就可能在达到新行之前耗尽ByteBuffer中的数据)

很有趣的回答。我对“BufferedReader”的性能有疑虑。在这种情况下,我将不需要解析。 - Rafael Orágio
1
如果你需要从文件中读取文本,你可以获得比使用NIO(不涉及复杂性)最高性能少25%的性能。无论如何,如果你使用的是HDD,你更可能受到硬件限制。(使用SSD可能会有一些小差别) - Peter Lawrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接