1

私はこのコードを持っています

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に関連するものであると読んだので、ファイルに情報を入力できません。不足しているものがありますか?

4

2 に答える 2

6

そのように書き込むためにファイルを開くたびに、つまり、次の行を実行するたびに:

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

ファイルは長さ 0 に切り捨てられます。さらに、 を明示的に呼び出すことはないため、記述close()したBufferedWriter行が実際にファイルにフラッシュされることはありません。その結果、データがディスクに書き込まれることはありません。

これを正しく行うには、まず、上記の行をループの前に移動して、1 回だけ実行されるようにします。次に、ループの後に、次のようなコードを含めます

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

最後に、あなたのプログラムは Mac では不必要に壊れていることに注意してください。Mac は Linux でもなく、cmd.exe. これを書いた方法の代わりに、Windows を明示的にテストし、見つかった場合は Windows コマンド ラインを使用します。それ以外の場合は、UNIX のようなものを想定して、Linux バージョンを使用してください。

于 2013-03-21T03:12:38.490 に答える
-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();
    }
}

Java7を使用している場合

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

    while ((s = stdInput.readLine()) != null) {
        System.out.println(s);
        s = s.toString();
        writer.write(s);
    }

}
于 2013-03-21T03:15:00.970 に答える