将.txt文件加载到textarea Java

将.txt文件加载到textarea Java,java,text,jtextarea,Java,Text,Jtextarea,我有一个加载指定文件的文本区域。除了只将文件的最后一行输出到textarea之外,其他一切都运行良好 File f = new File(this.path); try { // Create a Scanner for the file Scanner input = new Scanner(f); // Read text from the file while (input.hasNext()) { jTextArea1.setText(

我有一个加载指定文件的文本区域。除了只将文件的最后一行输出到textarea之外,其他一切都运行良好

File f = new File(this.path);

try {
    // Create a Scanner for the file
    Scanner input = new Scanner(f);

    // Read text from the file
    while (input.hasNext()) {
        jTextArea1.setText(input.nextLine());
    }

    // Close the file
    input.close();

} catch (FileNotFoundException fe) {
    fe.printStackTrace();
}

这是因为在while循环中,您正在设置文本,而不是附加到文本

因此,每次你得到一个新的输入行,你就会覆盖最后一行。最终只剩下最后一行输入


使用
jTextArea1.append(input.nextLine())而不是
jTextArea.setText(…)

这是因为在while循环中,您正在设置文本,而不是附加到文本

因此,每次你得到一个新的输入行,你就会覆盖最后一行。最终只剩下最后一行输入

使用
jTextArea1.append(input.nextLine())而不是
jTextArea.setText(…)

更换

jTextArea1.setText(input.nextLine());

setText()
用参数替换textArea中的所有文本,
append()
添加到textArea中的文本

jTextArea1.setText(input.nextLine());


setText()
用参数替换textArea中的所有文本,
append()
添加到textArea中的文本

您可以使用StringBuilder将所有输入附加在一起,并在末尾使用StringBuilder Varialbe的结果设置文本

File f = new File(this.path);
StringBuilder sb = StringBuilder();

    try( Scanner input = new Scanner(f)) {
        // Read text from the file
        while (input.hasNext()) {
           sb.append(input.nextLine());
        }
         jTextArea1.setText(sb);

    } catch (FileNotFoundException fe) {
        fe.printStackTrace();
    }
注意:您可以在Java7之后对资源使用try-catch块,所以不需要手动关闭扫描仪


阅读更多信息

您可以使用StringBuilder将所有输入附加在一起,并在末尾设置带有StringBuilder变量结果的文本

File f = new File(this.path);
StringBuilder sb = StringBuilder();

    try( Scanner input = new Scanner(f)) {
        // Read text from the file
        while (input.hasNext()) {
           sb.append(input.nextLine());
        }
         jTextArea1.setText(sb);

    } catch (FileNotFoundException fe) {
        fe.printStackTrace();
    }
注意:您可以在Java7之后对资源使用try-catch块,所以不需要手动关闭扫描仪


阅读更多

使用
java.util.Scanner
中的分隔符,您可以读取整个文件,而不是逐行读取

Scanner input = new Scanner(f);
input.useDelimiter("\\A");
if (input.hasNext()) {
    jTextArea1.setText(input.next());
}

有关
usedimiter(\\A”)
的详细信息,请参阅
java.util.Scanner
中的定界符,您可以读取整个文件,而不是逐行读取

Scanner input = new Scanner(f);
input.useDelimiter("\\A");
if (input.hasNext()) {
    jTextArea1.setText(input.next());
}

有关
useDelimiter(\\A”)
的详细信息,请参见中的。虽然大多数其他答案都正确地指出了使用
setText
而不是
appendText
,但事实是,
JTextArea
有一种加载文本的方便方法

JTextArea ta = new JTextArea();
try (BufferedReader br = new BufferedReader(new FileReader(new File("...")))) {
    ta.read(br, null);
} catch (IOException exp) {
    exp.printStackTrace();
}

这简化了整个过程。

虽然大多数其他答案都正确地指出使用
setText
而不是
appendText
,但事实是,
JTextArea
有一种加载文本的方便方法

JTextArea ta = new JTextArea();
try (BufferedReader br = new BufferedReader(new FileReader(new File("...")))) {
    ta.read(br, null);
} catch (IOException exp) {
    exp.printStackTrace();
}

这简化了整个过程…

对不起,我的意思是唯一显示的一行是最后一行。对不起,我的意思是唯一显示的一行是最后一行。你是对的,它是在每行后面替换文本。欣赏comment@user3424451我想知道我的方法是否也有效。你能试试吗?当然,我会试试的。你是对的,它在每行后面都替换了文本。欣赏comment@user3424451我想知道我的方法是否也有效。你能试试吗?当然,我会试试的