作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 JAVA 中,我想读取最大为 1MB 大小的 .log 文件的完整内容,我需要将其存储在 StringBuilder 中
我尝试使用此代码,但出现异常 STACKERRORFLOW。
String fileName = "C://test//.log";
File testfile = new File(fileName);
int ch;
StringBuilder strcontent = new StringBuilder();
try
{
FileInputStream fis = new FileInputStream(testfile);
while((ch = fis.read()) != -1)
strcontent.append((char)ch);
fis.close();
}
System.out.println(strcontent.toString());
这里面会出现什么问题。
最佳答案
如果你想阅读日志文件我建议你使用java.io.BufferedReader
BufferedReader r = null;
File testfile = new File("C://test//.log");
StringBuilder b = new StringBuilder();
try {
r = new BufferedReader(new FileReader(testfile));
String line = null;
while ((line = r.readLine()) != null) {
b.append(line);
}
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try {
r.close()
}
catch (Exception ex) {
ex.printStackTrace();
}
}
Stackoverflow 可能导致 @MadProgrammer 指出。
而且你正在逐个字符地读取更大的文件,我认为这是无效的。你知道 append()
方法会被调用多少次吗?
正如@joan 指出的 -Xmx JVM 选项,我认为这无济于事,因为这与堆大小问题有关,与 stackoverflow 无关。 SO 通常在您进行大型递归时抛出,或者通常在某些东西被多次调用并且变量填满堆栈时抛出。
关于java - 想要读取最大为 1MB 的文本文件的完整内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15679652/
我是一名优秀的程序员,十分优秀!