Java临时文件的读写

标签 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相关,所以这意味着我无法用信息填充该文件,我缺少什么吗?

最佳答案

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

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/

相关文章:

video - 无论如何,是否可以完全在线保护视频?

sql - 在 SQL 中向临时表添加日期列

MySQL - 从表的 id 字段中没有对应项的数字列表中选择

java - 提高 JVM 和 ANT 性能

java - 我们可以直接使用 * 运算符直接将两个字节相乘吗

java - Apache PDFBox 拒绝打开临时创建的 PDF 文件

c - 将内容从一个文件复制到另一个文件时出错 - 末尾出现随机字母

java - WAS 7 的异常 java.util.zip.ZipFile.ensureOpenOrZipException

android - 在android中保存来自服务器的图像的最佳方法

python - 第二次迭代文件不起作用