gpt4 book ai didi

Java临时文件的读写

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:28 26 4
gpt4 key购买 nike

我有这段代码

package Classes;

import java.io.*;

public class IpAdministrator {

public Boolean isActive(String ipAddress) {
boolean isActive = false;
String cmd;
String OS = System.getProperty("os.name");
System.out.println(OS);
String tmpfolder = System.getProperty("java.io.tmpdir");
System.out.println(tmpfolder);

//iptmp.deleteOnExit();

if (OS.equals("Linux")) {
cmd = "ping " + ipAddress + " -c 1";
} else {
cmd = "cmd /c ping " + ipAddress + " -n 1";
}
try {
String s = null;
Process p = Runtime.getRuntime().exec(cmd);
File iptmp = File.createTempFile("ipresult", ".txt", new File(tmpfolder));


BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));


while ((s = stdInput.readLine()) != null) {
System.out.println(s);
s = s.toString();
BufferedWriter writer = new BufferedWriter(new FileWriter(iptmp));
writer.write(s);

}


} catch (Exception ex) {
System.out.println(ex.getMessage().toString());
}


return isActive;
}

}

我想将命令的结果写入临时文件中,我发现了与此站点中的其他问题相关的内容,并且似乎工作正常,但是当我运行此文件时,该文件是用一些随机数字创建的(即:ipresult540677216848957037.txt)并且它是空的,我不明白为什么,我还读到它与java 1.7相关,所以这意味着我无法用信息填充该文件,我缺少什么吗?

最佳答案

每次打开文件以这种方式写入时 - 即每次执行此行时:

BufferedWriter writer = new BufferedWriter(new FileWriter(iptmp));

文件被截断为零长度。此外,由于您从未在 BufferedWriter 上显式调用 close(),因此您写入的行实际上永远不会刷新到文件中。结果,没有数据到达磁盘。

要正确执行此操作,首先将上面的行移到循环之前,这样它只执行一次。其次,在循环之后,包含如下代码

if (writer != null)
writer.close();

最后,请注意,您的程序在 Mac 上被不必要地破坏,Mac 既不是 Linux,也不使用 cmd.exe。与您编写此代码的方式不同,您可以针对 Windows 进行显式测试,如果找到它,则使用 Windows 命令行;否则,假设类似于 UNIX,并使用 Linux 版本。

关于Java临时文件的读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15538780/

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