接收消息并将其保存到当前目录中的文件中
Receiving message and saving it into a file in current directory
这是一个关于:接收消息并将其保存到当前目录中的文件中的问题。
我的问题是,即使收到消息,我也无法将它们写入文件。文件已更新,但它是空的。然而,消息打印在界面上。我想要的是消息在文件中,而不是打印在界面上。
这是代码
public void receiveMessages() {
File file = new File ("msgs.txt");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
PrintWriter printWriter = null;
try {
printWriter = new PrintWriter(file);
SealedObject encrypedSealedObject = null;
while(true){
try {
String message = this.crypto.decryptMsg(encrypedSealedObject);
printWriter.println(message);
}
catch (IOException e) {
break;
}
}
}
//catching exceptions ``here.... etc
}
感谢您的帮助!
- PrintWriter 实现了Flushable 接口。
A Flushable is a destination of data that can be flushed. The flush
method is invoked to write any buffered output to the underlying
stream.
因此,您必须将输出刷新到文件中。所以,你必须使用 pw.flush().
并且上面的代码将重写文件并且不附加后续消息。如果这是您的要求,那么没关系。但是,我建议如下:
PrintWriter pw = null;
if (appendToFile) {
pw = new PrintWriter(new FileWriter(filename, true));
} else {
pw = new PrintWriter(new FileWriter(filename));
}
不需要使用 2 次 try 和 catch,因为在这两个语句中你都在抛出 IOException。我建议抛出 Throwable 并在顶层处理错误,这是一种很好的做法,也更容易维护。函数调用只能执行逻辑。
这是一个关于:接收消息并将其保存到当前目录中的文件中的问题。 我的问题是,即使收到消息,我也无法将它们写入文件。文件已更新,但它是空的。然而,消息打印在界面上。我想要的是消息在文件中,而不是打印在界面上。
这是代码
public void receiveMessages() {
File file = new File ("msgs.txt");
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
PrintWriter printWriter = null;
try {
printWriter = new PrintWriter(file);
SealedObject encrypedSealedObject = null;
while(true){
try {
String message = this.crypto.decryptMsg(encrypedSealedObject);
printWriter.println(message);
}
catch (IOException e) {
break;
}
}
}
//catching exceptions ``here.... etc
}
感谢您的帮助!
- PrintWriter 实现了Flushable 接口。
A Flushable is a destination of data that can be flushed. The flush method is invoked to write any buffered output to the underlying stream.
因此,您必须将输出刷新到文件中。所以,你必须使用 pw.flush().
并且上面的代码将重写文件并且不附加后续消息。如果这是您的要求,那么没关系。但是,我建议如下:
PrintWriter pw = null; if (appendToFile) { pw = new PrintWriter(new FileWriter(filename, true)); } else { pw = new PrintWriter(new FileWriter(filename)); }
不需要使用 2 次 try 和 catch,因为在这两个语句中你都在抛出 IOException。我建议抛出 Throwable 并在顶层处理错误,这是一种很好的做法,也更容易维护。函数调用只能执行逻辑。