嗨我正在使用下面的方法从Jtextarea写入一个文件,我在Timer中每30秒调用一次这个方法,但是只在文件中添加新行,它会重写Jtextarea中包含的整行,然后我有重复的行。我想避免这种情况,只使用新行更新文件。你能帮我吗?
public void loger() {
FileWriter writer = null;
try {
writer = new FileWriter("MBM_Log_"+date()+".txt" , true);
textArea.write(writer);
} catch (IOException exception) {
System.err.println("log error");
exception.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException exception) {
System.err.println("Error closing writer");
exception.printStackTrace();
}
}
}
}
答案 0 :(得分:1)
writer = new FileWriter("MBM_Log_"+Date()+".txt" , true);
上面的代码在构造函数中使用了附加的boolean标志,将其设为false并重试:
writer = new FileWriter("MBM_Log_"+Date()+".txt" , false);
为避免每次都创建新文件,请在方法外部初始化文件编写器,然后使用它:
FileWriter writer = new FileWriter("MBM_Log_"+date()+".txt" , true);
public void loger() {
try {
textArea.write(writer);
} catch (IOException exception) {
System.err.println("log error");
exception.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException exception) {
System.err.println("Error closing writer");
exception.printStackTrace();
}
}
}
}
答案 1 :(得分:1)
变化:
writer = new FileWriter("MBM_Log_"+Date()+".txt" , true);
为:
writer = new FileWriter("MBM_Log_"+Date()+".txt", false);
或只是:
writer = new FileWriter("MBM_Log_"+Date()+".txt");
The constructor you're using for FileWriter
takes two arguments:String
文件名和boolean
,表示如果已存在,是否附加到文件。当你将此设置为true
时,它会将文本区域的上下文附加到文件上,而不是将文件替换为仅包含当前文本的文件。
如果您想保留文件的现有内容:
答案 2 :(得分:1)
您肯定需要附加到该文件(因此请在构造函数中保留true
)。
你做错的是使用Swing组件来存储数据。 Swing组件旨在显示数据。想象一下如果您的经理/主管/老师告诉您使用另一个GUI库或将整个应用程序转换为Web服务器会发生什么 - 您将不得不放弃JTextArea,然后无处可以保存日志消息。
您应该收集一些日志消息,例如List
,然后使用此集合显示消息。您的日志消息类可以具有将日志消息转换为String
的功能。然后,每30秒查看一次列表只是一个问题,并附加时间戳比上次保存时间更新的消息。
答案 3 :(得分:0)
我更改了代码而不是从Jtextarea写入文件我直接将字符串(LOG)写入文件。我的方法loger()变为如下: public void loger(String texLine){
FileWriter writer = null;
try {
writer = new FileWriter("MBM_Log_"+date()+".txt" , true);
PrintWriter out = new PrintWriter(writer);
out.printf("%s"+"%n", texLine);
out.close();
} catch (IOException exception) {
System.err.println("log error");
exception.printStackTrace();
}
finally {
if (writer != null) {
try {
writer.close();
} catch (IOException exception) {
System.err.println("Error closing writer");
exception.printStackTrace();
}
}
}
}
然后我将日志写入Jtextarea以显示在GUI中并调用方法loger()来写入文件,例如:
textArea.append(dateTime()+“:操作员从菜单栏中静音的警报声音”);
loger(dateTime()+“:操作员从菜单栏中静音警报声”);
通过这种方式,我在Jtextarea和文件中有日志。当我重新启动应用程序时,我的问题得到解决,文件没有被删除,新的日志被添加到文件中。 谢谢大家。