gpt4 book ai didi

java - 如果我手动关闭它,程序只写入文件?

转载 作者:行者123 更新时间:2023-11-29 06:26:19 25 4
gpt4 key购买 nike

KnockKnockServer 文件

这将启动服务器

public static void main(String[] args) {
/* Create new Server object
* Call run() on new Server object
*/
KnockKnockServer kks = new KnockKnockServer();
kks.run();

}

这将启动新线程并打开日志文件。

 private void run(){
try {
File logfile = new File("prog1b.log");
FileOutputStream fos = new FileOutputStream(logfile);
PrintWriter out = new PrintWriter(fos, true);
ServerSocket serverSocket = new ServerSocket(5520);
while(true){
try {
Socket serverClient = serverSocket.accept();
KnockKnockServerThread kkst = new KnockKnockServerThread(serverClient, out);
kkst.start();
} catch (IOException evt) {
System.out.println("Error");
}
}
} catch (IOException evt) {
System.out.println("error");
}
}

KnockKnockThread 文件

public KnockKnockServerThread(Socket clientSocket, PrintWriter logfile) {
serverClient = clientSocket;
lOut = logfile;
}

这会写入文件并回复客户端。

public void run() {
try {
sOut = new PrintWriter(serverClient.getOutputStream(), true);
lOut.write(formatter.format(date) + ": Client connected from " + serverClient.getRemoteSocketAddress() + " on port # " + serverClient.getPort() + ".\n");
in = new BufferedReader(new InputStreamReader(serverClient.getInputStream()));

String clientMessage = "", serverMessage = "";

while (!clientMessage.equals("quit")) {
clientMessage = in.readLine();
if(!clientMessage.equals("quit")) {
serverMessage = encrypt(clientMessage);
sOut.println(serverMessage);
lOut.write(formatter.format(date) + " Client " + serverClient.getPort() + ": " + clientMessage + "\n");
lOut.write(formatter.format(date) + " Server: " + serverMessage + "\n");
}
else if(clientMessage.equals("quit")){
sOut.println("Good Bye!\n");
lOut.write(formatter.format(date) + ": Connection closed on port " + serverClient.getPort() + ".\n");
}
}
sOut.close();
in.close();
serverClient.close();
} catch (IOException e) {
System.out.println("Error");

}
}

程序的一般要点

无论出于何种原因,当我手动关闭文件时,我只能在日志文件中看到文本。否则它完全是空白的。我在网上找不到任何帮助。我想也许它会回到第一个 run() 并创建一个新文件来清除文本,但我在各处都放置了打印语句,但事实并非如此。我彻底糊涂了。我无法关闭该文件,因为服务器需要准备好从其他线程写入日志文件。

最佳答案

如果你想更快地将数据写入文件,你需要在流上调用flush()。这是因为通常缓冲数据以提高 I/O 性能。来自docs flush 方法:

Flushes the output stream and forces any buffered output bytes to be written out. The general contract of flush is that calling it is an indication that, if any bytes previously written have been buffered by the implementation of the output stream, such bytes should immediately be written to their intended destination.

关于java - 如果我手动关闭它,程序只写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58208850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com