首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java:将文本文件输出到控制台

Java:将文本文件输出到控制台
EN

Stack Overflow用户
提问于 2010-10-07 22:05:10
回答 6查看 41.6K关注 0票数 5

我试图用Java将一个文本文件输出到控制台。我想知道怎样才是最有效的方法?

我已经研究过几种方法,但是很难分辨哪个是性能影响最小的解决方案。

将文本文件输出到控制台需要读取文件中的每一行,然后将其写入控制台。

是否更好地使用:

  1. 用FileReader缓冲读取器,用行读取并执行一串system.out.println调用? BufferedReader in =新BufferedReader(新FileReader(“C:\FileReader\”));in.readLine (in.readLine() = null) { System.out.println( blah );} in.close();
  2. 扫描器读取文件中的每一行并执行system.print调用? while (scanner.hasNextLine()) { System.out.println(blah blah blah);}

谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-10-07 22:27:33

如果您对文本文件包含的基于字符的数据不感兴趣,只需将其作为字节流。

代码语言:javascript
运行
复制
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是最快的方法。

代码语言:javascript
运行
复制
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();
}
票数 4
EN

Stack Overflow用户

发布于 2010-10-07 22:21:14

如果您只想打印文件的内容(并且不想打印下一个int/double/等等)。到控制台,那么BufferedReader就可以了。

但是,您的代码不会产生您想要的结果。试一试:

代码语言:javascript
运行
复制
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发送的信息的能力。

票数 5
EN

Stack Overflow用户

发布于 2016-09-21 00:44:50

如果它是一个相对较小的文件,那么实现这一目的的一行7+方法是:

代码语言:javascript
运行
复制
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

干杯!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3886201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档