我有这段代码
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相关的东西,所以这意味着我无法用信息填充文件,有些东西我错过了?
答案 0 :(得分:6)
每次打开文件以便以这种方式书写 - 即每次执行此行时:
BufferedWriter writer = new BufferedWriter(new FileWriter(iptmp));
文件被截断为零长度。此外,由于您从未在close()
上明确调用BufferedWriter
,因此您执行写入的行永远不会实际刷新到该文件。结果,没有任何数据进入磁盘。
要正确执行此操作,首先,将上面的行移到循环之前,因此它只执行一次。其次,在循环之后,包括像
这样的代码if (writer != null)
writer.close();
最后,请注意您的程序在Mac上是不必要的,它既不是Linux,也不是cmd.exe
。而不是你写这个的方式,你明确测试Windows,如果你找到它,使用Windows命令行;否则,假设类似UNIX,并使用Linux版本。
答案 1 :(得分:-5)
你需要关闭作家
BufferedReader stdInput = new BufferedReader(new InputStreamReader(
p.getInputStream()));
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(iptmp));
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
s = s.toString();
writer.write(s);
}
} finally {
if (writer != null) {
writer.close();
}
}
如果您使用的是java 7
try (BufferedWriter writer = new BufferedWriter(new FileWriter(
iptmp));) {
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
s = s.toString();
writer.write(s);
}
}