为什么在我将已读取文件的行追加到其中之后无法打印此 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)));