Java临时文件,读写

时间:2013-03-21 03:09:24

标签: java file temp

我有这段代码

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相关的东西,所以这意味着我无法用信息填充文件,有些东西我错过了?

2 个答案:

答案 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);
    }

}