gpt4 book ai didi

java - jTextArea 使用 BufferedReader 仅保存文本文件中的第一行文本?

转载 作者:行者123 更新时间:2023-12-01 21:30:05 24 4
gpt4 key购买 nike

我试图将文本文件中的多行输出从我的 jTextArea(在代码中命名为“outputarea”)保存到我想要的路径,一切正常,但保存的文件不包含整个输出,但是仅第一行文字。我使用“\n”在 jtextarea 中断行,同时给出多行输出,这在这段代码中是否有任何区别或任何其他问题,这段代码只是 saveAs 按钮上的代码,输出来 self 的另一个方法已经创建了。提前致谢!

private void saveAs() {

FileDialog fd = new FileDialog(home.this, "Save", FileDialog.SAVE);
fd.show();
if(fd.getFile()!=null)
{
fn=fd.getFile();
dir=fd.getDirectory();
filename = dir + fn +".txt";
setTitle(filename);
try
{

DataOutputStream d=new DataOutputStream(new FileOutputStream(filename));
holdText = outputarea.getText();
BufferedReader br = new BufferedReader(new StringReader(holdText));
while((holdText = br.readLine())!=null)
{
d.writeBytes(holdText+"\r\n");
d.close();
}
}
catch (Exception e)
{
System.out.println("File not found");
}
outputarea.requestFocus();
save(filename);
}

}

最佳答案

您应该将 d.close(); 放在 while 循环完成之后,因为在使用 DataOutputStream 在文件中写入第一行后,您正在关闭你不让它完成全部工作。

您甚至可以看到控制台中写入了错误:

File not found

这并不是因为它找不到您的文件,而是因为在第一次之后的迭代中,它尝试写入关闭的流。所以只写了第一行。因此,请像这样更改代码:

while ((holdText = br.readLine()) != null) {
d.writeBytes(holdText + "\r\n");
}
d.close();

我还建议使用 PrintWriter 而不是 DataOutputStream。然后您可以轻松地将 writeBytes 更改为 println 方法。这样您就不需要手动将 \r\n 附加到您编写的每一行。

另一个好的提示是使用 try-with-resource (如果您使用 java 7 或更高版本)或至少一个 finally block 来关闭流方式:

String holdText = outputarea.getText();
try (PrintWriter w = new PrintWriter(new File(filename));
BufferedReader br = new BufferedReader(new StringReader(holdText))) {
while ((holdText = br.readLine()) != null) {
w.println(holdText);
}

} catch (Exception e) {
System.out.println("File not found");
}

祝你好运。

关于java - jTextArea 使用 BufferedReader 仅保存文本文件中的第一行文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37523553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com