安卓 FileWriter只写第一行(启用附加模式,Java)
我无法将来自客户的传入信息写入此程序。数据输入,系统每秒输出一次数据。输出,但FileWriter仅打印程序启动时的第一行输出。我手动停止程序,然后检查文件。我不确定出了什么问题,请帮忙
import javax.swing.*;
import java.awt.event.KeyEvent;
import java.net.*;
import java.io.*;
import java.sql.SQLException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class Server {
public static void main(String[] args) throws IOException, SQLException, ClassNotFoundException {
String msg_received;
FileWriter fw = new FileWriter("HeartData.txt", true);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter out = new PrintWriter(bw);
System.out.println("Waiting for Android client to connect...");
while (true)
{
try
{
ServerSocket server = new ServerSocket(2323);
Socket s = server.accept();
server.close();
InetAddress clientAddress = s.getInetAddress();
System.out.println("Incoming connection from: " + clientAddress.getHostName() + "[" + clientAddress.getHostAddress() + "]");
DataInputStream DIS = new DataInputStream(s.getInputStream());
msg_received = DIS.readUTF();
out.println(msg_received + "," + LocalTime.now() + "," + LocalDate.now());
System.out.printf("Android says: %sat %s%n", msg_received, LocalTime.now());
}
catch (IOException e){e.printStackTrace();}
finally {
out.close();
}
}
}
}
输出示例:
正在等待Android客户端连接
来自主机名的传入连接。域[IP地址] 安卓说:什么 10:51:06.013
# 1 楼答案
你有这样的结构:
换句话说,在第一行之后关闭输出,但继续工作。这不会重新打开输出
你真的应该在整个过程中使用try with resource块,while循环完全在中,这样你就不会关闭writer,直到你的整个循环完成。(无可否认,目前它只能因异常而结束……您可能需要添加一些非异常的方法来停止循环……)