我试图用Java将一个文本文件输出到控制台。我想知道怎样才是最有效的方法?
我已经研究过几种方法,但是很难分辨哪个是性能影响最小的解决方案。
将文本文件输出到控制台需要读取文件中的每一行,然后将其写入控制台。
是否更好地使用:
谢谢。
发布于 2010-10-07 22:27:33
如果您对文本文件包含的基于字符的数据不感兴趣,只需将其作为字节流。
InputStream input = new BufferedInputStream(new FileInputStream("C:/logs.txt"));
byte[] buffer = new byte[8192];
try {
for (int length = 0; (length = input.read(buffer)) != -1;) {
System.out.write(buffer, 0, length);
}
} finally {
input.close();
}
这节省了不必要地在字节和字符之间进行按摩的成本,也节省了在换行符上进行扫描和拆分并再次追加它们的成本。
至于表演,您可能会发现这篇文章很有趣。本文认为,使用256 K字节数组(通过包装的FileChannel
读取并直接从字节数组写入)的ByteBuffer
是最快的方法。
FileInputStream input = new FileInputStream("C:/logs.txt");
FileChannel channel = input.getChannel();
byte[] buffer = new byte[256 * 1024];
ByteBuffer byteBuffer = ByteBuffer.wrap(buffer);
try {
for (int length = 0; (length = channel.read(byteBuffer)) != -1;) {
System.out.write(buffer, 0, length);
byteBuffer.clear();
}
} finally {
input.close();
}
发布于 2010-10-07 22:21:14
如果您只想打印文件的内容(并且不想打印下一个int/double/等等)。到控制台,那么BufferedReader
就可以了。
但是,您的代码不会产生您想要的结果。试一试:
BufferedReader in = new BufferedReader(new FileReader("C:\\logs\\log001.txt"));
String line = in.readLine();
while(line != null)
{
System.out.println(line);
line = in.readLine();
}
in.close();
不过,我不会太担心,因为最主要的瓶颈是控制台打印Java发送的信息的能力。
发布于 2016-09-21 00:44:50
如果它是一个相对较小的文件,那么实现这一目的的一行7+方法是:
System.out.println(new String(Files.readAllBytes(Paths.get("logs.txt"))));
有关更多详细信息,请参阅https://docs.oracle.com/javase/7/docs/api/java/nio/file/package-summary.html。
干杯!
https://stackoverflow.com/questions/3886201
复制相似问题