如何在Java Swing中将文本文件读取到JTextArea中

3

这是我的代码:

try {
    String textLine;
    FileReader fr = new FileReader("ad.txt");
    BufferedReader reader = new BufferedReader(fr);
    while((textLine=reader.readLine()) != null) {
        textLine = reader.readLine();
        jTextArea1.read(reader, "jTextArea1");
    }
}
catch (IOException ioe) {
    System.err.println(ioe);
    System.exit(1);
}

我的 .txt 文件包含以下内容:

contig00001 长度=586 读数=4 CGGGAAATTATCcGCGCCTTCACCGCCGCCGGTTCCACCGACGAACGGATACTGCGtGaa ggCCGCGATCCCGTCggaCGGAAAaCGCCcTGGCCCGGGAaCATACCGTTCGGGCCGCCA AGTGTTATAGCCGGACCACTTGTCAGAACATTTCCaaTCCGAAGATGTGAGTtCGGAAGg TAAAAGCCCGACAAGTTGCGCGgTGAATTTACCTTtACcGCACGATATGCGTCCGTATTA AaGAAAaGTTCGAAATTATCAGTAAGGCCGACCTGAAaGCTGACCGGGAGTTCAACAAAA TCTGCATCACCcGGgTCACGGTCGAAATTGCTGTACGCGGCGCTGAACGTAAATTCACCC TTTcTAAGGGTGTCGCcGTCGTAAACCGTAAaCAaGCCGGTAGCGCCGCCCATCGGGCCG CCGGTACCAACCGTCGGTGCCGTGTTTCTtGCATCATTGTCCGATCGAGCGTTCTCGTCC GCTTGTGCAAaTCCTGCAaTAGCTAACGTGAAAACGATCAGAGCTGTTGTAAATACTCTA TAAGCGAGATTCATCACATTCCTCcGCCGAAATAAAAAGTTAATTt

contig00002 长度=554 读数=4 TGCGCCAaCCGCGCTCTtCATAAaTGGGCACTGCTCCCGATGGCCgACTCGGGCGGTTCG CCATGAGATCTTTGCCtACCcAGgAaCtCACcACCAAGTCTGATTGCTGTGTGTTTtCTT CAAGTCCCTATTTCTATTCtCTTtAATGGAACCCGTAGGAAACCCGTGTAGGACGCGGGA aCCGCACTTgAAGGGGGAGGCGCGGGGTACCGGtCCGGGAACGTACGGGTACCGGCGGGG gAGGGGAGGGGGACCgCTCCGGGAAGGCCAGGGGACGGATTGGGGAAGGgCGGGTACCGA AGCGGGgAAaTGGGggAaCcGGCGAGAGGGTTCCTCGCTAAGTGGGGGAAATaGGGGAAA GGTTGACCAGTGGTtCCCcGCTCTCGTAACATGCCTCAGATAGCGCCATCCGCTGTACCT GGtcaggtcGctggcaacttcggccgagcaggtgaacccgaaaggtgagggtcagtgtga cacaccaaccgaacaccgacgaggcaagcgtaggagccggcgtggccgcgcccggcggcg ctgaggactcctcg

但是它通过跳过前两行来显示输出结果。这是为什么呢?
5个回答

7
你不需要while循环或者readLine方法,只需要调用即可。

编辑: 根据你的评论更新。如果你想跳过所有以>开头的行,你需要手动读取文件,然后将每一行追加到你的文本区域中。

所以大概是这样的:

String line;
while ((line = reader.readLine()) != null)
{
    if (!line.startsWith(">"))
    {
        jTextArea.append(line + "\n");
    }
}

谢谢你的回复,但我想跳过所有以符号“>”开头的行。 - jack1
1
谢谢,我已经写了以下代码: try { File file = new File("c:\ad.txt"); FileReader fr = new FileReader(file); BufferedReader reader = new BufferedReader(fr); String textLine; while((textLine=reader.readLine())!=null){ if(!textLine.startsWith(">")) { jTextArea1.append(textLine + "\n"); } jTextArea1.read(reader,"jTextArea1"); } } catch (IOException ioe) { System.err.println(ioe); System.exit(1); } - jack1

5

使用:

FileReader reader = new FileReader("filename.txt");
txtarea.read(reader, "filename.txt"); //Object of JTextArea

你只需要以上两行代码就可以从文件中读取内容并将其放入JTextArea...

0

textLine = reader.readLine();被调用了两次...

已修复:

try {
    String textLine;
    FileReader fr = new FileReader("ad.txt");
    BufferedReader reader = new BufferedReader(fr);

    while((textLine=reader.readLine()) != null){
        // textLine = reader.readLine(); // Remove this line
        jTextArea1.read(reader, "jTextArea1");
    }
}
catch (IOException ioe) {
    System.err.println(ioe);
    System.exit(1);
}

while循环和其中的readLine()条件也不需要。 - Alexey Ivanov

0

正确的写法是:

try {
    FileReader fr = new FileReader("tablica.txt");
    BufferedReader reader = new BufferedReader(fr);

    do {
        l.read(reader, null);
    }

    while ((textLine=reader.readLine()) != null)
        ;

}

catch (IOException ioe) {
    System.err.println(ioe);
    System.exit(1);
}

1
这段代码似乎没有将任何内容加载到jTextArea中。 - Alexey Ivanov

0
问题肯定已经解决了,但是对于为什么跳过前两行还没有答案。
您创建了一个名为reader的读取器对象,然后从文件中读取了前两行,剩余的行加载到jTextArea1中。
您的代码:
/* 1 */ while((textLine=reader.readLine())!=null){
/* 2 */     textLine = reader.readLine();
/* 3 */     jTextArea1.read(reader,"jTextArea1");
        } 

第1行从文件中读取第一行。然后在while循环的主体中,在第2行从文件中读取第二行。第3行将文件的其余部分读入jTextArea1

在while循环的下一次迭代中,reader.readLine()返回null,因为文件已经完全读取。


要在JTextComponent中加载文本,请使用read方法,如PhillBhushankumar所建议。

read的第二个参数不被JTextArea使用,因此可以安全地传递null。这个第二个参数通常用于存储加载文件的URL以解析相对引用,例如HTMLDocument中的链接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接