jTextArea 使用 BufferedReader 仅保存文本文件中的第一行文本?
jTextArea saves only first line of text in text file using BufferedReader?
我正在尝试将我的 jTextArea(在代码中命名为 "outputarea")的文本文件中的多行输出保存到我想要的路径,一切正常,但保存的文件不包含整个输出,但只有第一行文本。我正在使用“\n”在 jtextarea 中换行,同时提供多行输出,这是否会造成任何差异或此代码中的任何其他问题,此代码只是 saveAs 按钮上的代码,输出来自另一种方法我'已经创建。提前致谢!
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
块来关闭流:
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");
}
祝你好运。
我正在尝试将我的 jTextArea(在代码中命名为 "outputarea")的文本文件中的多行输出保存到我想要的路径,一切正常,但保存的文件不包含整个输出,但只有第一行文本。我正在使用“\n”在 jtextarea 中换行,同时提供多行输出,这是否会造成任何差异或此代码中的任何其他问题,此代码只是 saveAs 按钮上的代码,输出来自另一种方法我'已经创建。提前致谢!
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
块来关闭流:
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");
}
祝你好运。