我有以下问题。我已经创建了一个方法,读取一个非常大的文本文件从它的路径开始。
文件是逐行读取的,每一行都被附加到StringBuffer中。
这是我的代码:
public void run(Vector parametri) {
if (parametri != null && (parametri.isEmpty() == false)) {
gvParam = (Vector) parametri.clone();
} else {
TraceLog.scrivi("Test Esistenza Parametri", "Parametri mancanti", false, TraceLog.lowConsole + TraceLog.highTrace + TraceLog.highLog);
target.azione("Parametri mancanti !!");
return;
}
String fattureXml = gvParam.get(0).toString();
// READ THE FILE:
StringBuffer fileContent = new StringBuffer();
try {
// Creazione del reader per leggere il file:
BufferedReader br = new BufferedReader(new FileReader(fattureXml));
String line = null;
while ((line = br.readLine()) != null) {
//System.out.println(line);
fileContent.append(line);
}
System.out.println(fileContent.toString());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
阅读段开始于注释//READ The FILE:
文件读取似乎工作正常,因为我使用了这一行(实际上是注释)
System.out.println(line);
检查所读行是否正确。
正如您现在看到的,我正在将这一行添加到StringBuffer中(以获得表示所读文件内容的大字符串),通过:
fileContent.append(line);
问题是,在循环之后,我试图在控制台中打印fileContent StringBuffer的内容,通过:
System.out.println(fileContent.toString());
但是没有打印。
为什么?我错过了什么?究竟是什么包含fileContent StringBuffer?它是像一个包含读取文件行之类的大字符串吗?
我的猜测是:由于您丢弃了所有的新行字符,您最终得到了一个非常长的行,这是您的控制台无法处理的问题。(我自己在Eclipse控制台中经历过这种情况。)
尝试改变
fileContent.append(line);
fileContent.append(line).append('n');
正如@assylias指出的那样,您也可能想要放弃Vector
(并使用ArrayList
代替)。还有,看看这个问题:StringBuilder和StringBuffer的区别。
为将来参考,"现代"的做法是
String content = new String(Files.readAllBytes(Paths.get(fileName)));