【发布时间】:2013-03-14 14:50:49
【问题描述】:
在读取大文件时,我从这段代码中得到了一些奇怪的输出,该文件是使用 while 循环打印到 99,999 位的,但是,在读取文件并打印内容时,它只输出 99,988 行。另外,使用 ByteBuffer 是读取文件的唯一选择吗?我见过其他一些使用 CharBuffer 的代码,但我不确定应该使用哪一个,以及在什么情况下应该使用它们。 注意:filePath 是指向磁盘上文件的 Path 对象。
private void byteChannelTrial() throws Exception {
try (FileChannel channel = (FileChannel) Files.newByteChannel(filePath, READ)) {
ByteBuffer buffer = ByteBuffer.allocate(1024);
String encoding = System.getProperty("file.encoding");
while (channel.read(buffer) != -1) {
buffer.rewind();
System.out.print(Charset.forName(encoding).decode(buffer));
buffer.clear();
}
}
【问题讨论】:
-
该代码应正确打印文件的全部内容。它是否打印正确打印的内容?您是否考虑过使用
BufferedReader包裹InputStreamReader包裹FileInputStream? -
你在计算数字还是线(你提到两者)?另外,您如何确定写入的行数?
-
每个新整数对应一行。所以数字计数就是行数。
标签: java file io nio filechannel