Java exec() メソッドの出力リダイレクトの失敗
この問題では、ユーザーが Java のランタイムを使用してシェル スクリプトの出力をリダイレクトしようとします.getRuntime().exec() メソッド。ただし、リダイレクトは失敗し、指定された出力ファイルは作成されません。
指定されたコード スニペットは次のとおりです。
Process p = Runtime.getRuntime().exec("sh somescript.sh &> out.txt");
通常、このコマンドはスクリプトの出力をファイルにリダイレクトする必要があります。アウト.txt。ただし、この場合、スクリプトがシェルで直接実行された場合は正常に実行されても、出力はリダイレクトされません。
解決策: リダイレクトに ProcessBuilder を使用します
解決策は、Runtime.getRuntime().exec() の代わりに ProcessBuilder を利用することです。 ProcessBuilder は、プロセス作成の制御を強化し、入力、出力、およびエラー ストリームの明示的なリダイレクトを可能にします。
ProcessBuilder を使用して変更されたコードは次のとおりです。
ProcessBuilder builder = new ProcessBuilder("sh", "somescript.sh"); builder.redirectOutput(new File("out.txt")); builder.redirectError(new File("out.txt")); Process p = builder.start(); // may throw IOException
このコードでは、 ProcessBuilder は、標準出力ストリームとエラー ストリームの両方をファイル out.txt にリダイレクトするように作成および構成されます。次に、start() メソッドを使用してプロセスが作成され、問題がある場合は IOException がスローされる可能性があります。
ProcessBuilder を利用することで、出力リダイレクトを明示的に管理でき、問題を解決できます。
以上がexec() メソッドを使用して Java 出力リダイレクトの失敗を修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。