15
   Process p = Runtime.getRuntime().exec(command);
   is = p.getInputStream();
   byte[] userbytes = new byte[1024];
   is.read(userbytes);

LinuxOSでJavaからシェルコマンドを実行したい。しかし、pmdのレポートによると、java Runtime.exec()は使用しないでください。なんで?理由は何ですか ?Runtime.exec()に代わるものはありますか?

4

1 に答える 1

38

古い JVM に行き詰まっていない限りjava.lang.ProcessBuilder、プロセスの指定、環境のセットアップ、生成、ファイル記述子の処理がはるかに簡単になります。

このクラスは、オペレーティング システム プロセスの作成に使用されます。

ProcessBuilderインスタンスは、プロセス属性のコレクションを管理します。このstart()メソッドは、それらの属性を持つ新しいProcessインスタンスを作成します。このstart()メソッドを同じインスタンスから繰り返し呼び出して、同一または関連する属性を持つ新しいサブプロセスを作成できます。

...

デフォルトの作業ディレクトリと環境を使用する新しいプロセスを開始するのは簡単です:

 Process p = new ProcessBuilder("myCommand", "myArg").start();

変更された作業ディレクトリと環境でプロセスを開始する例を次に示します。

 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
 Map<String, String> env = pb.environment();
 env.put("VAR1", "myValue");
 env.remove("OTHERVAR");
 env.put("VAR2", env.get("VAR1") + "suffix");
 pb.directory(new File("myDir"));
 Process p = pb.start();
于 2012-05-23T15:40:23.413 に答える