为什么在我将已读取文件的行追加到其中之后无法打印此 StringBuffer 对象的内容?
Why I can't print the content of this StringBuffer object after that I have append into it the lines of a readed file?
我有以下问题。我创建了一种方法,可以从其路径开始读取一个非常大的文本文件。
逐行读取文件,每行附加到 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();
}
}
阅读部分在评论后开始 // 阅读文件:
读取的文件似乎工作正常,因为我使用了这一行(实际注释)
System.out.println(line);
检查读取的行,它读取正确。
正如您现在看到的,我正在将这一行添加到 StringBuffer(以获得表示已读文件内容的大字符串),方法是:
fileContent.append(line);
问题是,在循环之后,我试图在控制台中打印 fileContent StringBuffer 的内容,作者:
System.out.println(fileContent.toString());
但没有打印任何内容。
为什么?我错过了什么? fileContent StringBuffer 究竟包含什么?它是类似于包含读取文件行的大字符串还是什么?
这是我的猜测:因为您要丢弃所有 new-line 个字符,所以您最终会得到一个 非常长的行 ,您的控制台无法处理它。 (我在 Eclipse 控制台中亲身体验过。)
尝试改变
fileContent.append(line);
到
fileContent.append(line).append('\n');
正如@assylias 指出的那样,您可能还想删除 Vector
(例如使用 ArrayList
)。另外,看看这个问题:Difference between StringBuilder and StringBuffer.
为了将来参考,"modern" 这样做的方法是
String content = new String(Files.readAllBytes(Paths.get(fileName)));
我有以下问题。我创建了一种方法,可以从其路径开始读取一个非常大的文本文件。
逐行读取文件,每行附加到 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();
}
}
阅读部分在评论后开始 // 阅读文件:
读取的文件似乎工作正常,因为我使用了这一行(实际注释)
System.out.println(line);
检查读取的行,它读取正确。
正如您现在看到的,我正在将这一行添加到 StringBuffer(以获得表示已读文件内容的大字符串),方法是:
fileContent.append(line);
问题是,在循环之后,我试图在控制台中打印 fileContent StringBuffer 的内容,作者:
System.out.println(fileContent.toString());
但没有打印任何内容。
为什么?我错过了什么? fileContent StringBuffer 究竟包含什么?它是类似于包含读取文件行的大字符串还是什么?
这是我的猜测:因为您要丢弃所有 new-line 个字符,所以您最终会得到一个 非常长的行 ,您的控制台无法处理它。 (我在 Eclipse 控制台中亲身体验过。)
尝试改变
fileContent.append(line);
到
fileContent.append(line).append('\n');
正如@assylias 指出的那样,您可能还想删除 Vector
(例如使用 ArrayList
)。另外,看看这个问题:Difference between StringBuilder and StringBuffer.
为了将来参考,"modern" 这样做的方法是
String content = new String(Files.readAllBytes(Paths.get(fileName)));