相当简单的问题,我有一个带有一些文件的服务器,我们称之为serverFile.txt
,我希望将它逐行发送给某个客户端。为实现这一点,我在服务器端编写了这个简单的代码
BufferedReader br = new BufferedReader(new FileReader(fileName));
String line = br.readLine();
while(line != null)
{
line = line + System.lineSeparator();
MMULogFileController.getOos().writeObject(line);
line = br.readLine();
System.out.println(line);
}
br.close();
其中MMULogFileController.getOos是接受套接字的输出流。
它确实打印了文件serverFile.txt
我的问题出在客户端。这是相关的代码 -
ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
String line = (String)in.readObject();
File newLogFile = new File("newLog.txt");
PrintWriter ptofile = new PrintWriter(newLogFile.getName());
while(line != null)
{
ptofile.write(line);
try
{
line = (String) in.readObject();
}
catch(java.io.EOFException e)
{
line = null;
}
}
ptofile.close();
并将所有行正确打印到客户端的新文件中,最后一行除外。我知道它是从服务器发送的,因为它是打印的,但在客户端它收到null因为它到达EOF。有什么方法可以解决这个问题吗?
答案 0 :(得分:2)
我自己,我会使用PrintStream发送文本,然后使用BufferedReader或Scanner读取它。但话说回来,如果你坚持使用ObjectOutputStream,你应该在发送文件的文本时刷新或关闭它,当你完成使用它时肯定要关闭它。
另外,请避免使用此类代码:
catch(java.io.EOFException e)
{
line = null;
}
因为这意味着您完全无视您的例外情况。至少查看堆栈跟踪。