私はJavaからコマンドラインコマンドを実行しています:
ping localhost > output.txt
コマンドは、次のように Java 経由で送信されます。
Process pr = rt.exec(command);
何らかの理由でファイルが作成されませんが、コマンドライン自体からこのコマンドを実行すると、ファイルが作成され、出力がそのファイルに表示されます。
java コマンドでファイルが作成されないのはなぜですか?
私はJavaからコマンドラインコマンドを実行しています:
ping localhost > output.txt
コマンドは、次のように Java 経由で送信されます。
Process pr = rt.exec(command);
何らかの理由でファイルが作成されませんが、コマンドライン自体からこのコマンドを実行すると、ファイルが作成され、出力がそのファイルに表示されます。
java コマンドでファイルが作成されないのはなぜですか?
あなたはそれをファイルに向けていないからです。
コマンド ラインで、ファイルにリダイレクトするように要求しました。Process オブジェクト (実際のプロセスの出力ストリームに対応) によって提供される InputStream を介して、Java でも同じことを行う必要があります。
プロセスから出力を取得する方法は次のとおりです。
InputStream in = new BufferedInputStream( pr.getInputStream());
これからEOFまで読み取り、出力をファイルに書き込むことができます。このスレッドをブロックしたくない場合は、別のスレッドから読み書きしてください。
InputStream in = new BufferedInputStream( pr.getInputStream());
OutputStream out = new BufferedOutputStream( new FileOutputStream( "output.txt" ));
int cnt;
byte[] buffer = new byte[1024];
while ( (cnt = in.read(buffer)) != -1) {
out.write(buffer, 0, cnt );
}
1. Java プログラムからコマンドを正常に実行した後、出力を読み取り、出力をファイルに転用する必要があります。
例えば:
Process p = Runtime.getRuntime().exec("Your_Command");
InputStream i = p.getInputStream();
InputStreamReader isr = new InputStreamReader(i);
BufferedReader br = new BufferedReader(isr);
File f = new File("d:\\my.txt");
FileWriter fw = new FileWriter(f); // for appending use (f,true)
BufferedWriter bw = new BufferedWriter(fw);
while((br.readLine())!=null){
bw.write(br.readLine()); // You can also use append.
}
シンプルに保ちたいのですが、Windowsを使用している場合は、次を試してください。
Process pr = rt.exec("cmd /c \"ping localhost > output.txt\"");
Andy の回答を補完するために、この記事を読む必要があると思います: http://www.javaworld.com/jw-12-2000/jw-1229-traps.html。
Java で外部プロセスを処理する必要がある人にとっては非常に重要です。