2

重複の可能性:
パイプをRuntime.exec()で機能させる方法は?

こんにちは私はexecコマンドを使用して簡単なJava関数を作成しました。この関数は、フォントがシステム(Linux)に存在することを確認します。最初に私は簡単なbashコマンドを書きました:identify -list font | grep -i 'Font: Times-Bold' -wそしてその仕事は完璧なので私は簡単なプログラムを作成します:

public abstract class SystemReader{

    public static final void checkFontExist(String name){
            String command = "identify -list font | grep -i -w \'Font: "  + name + "\'";
            Process p  =Runtime.getRuntime().exec(command);

            String lines = "";
            String resoults ="";
            BufferedReader bufferedReader = new BufferedReader(new      InputStreamReader(p.getInputStream()));
            while((line  buferedReader.readLine())!=null){
                    resoult += line + "\n";
            }

            System.out.println("RESPONSE: " + resoult);
            bufferreader.close();
    }

}

その動作はしますが、私は見ていません。この関数は、システムに存在するすべてのフォントを返します。コマンドgrepはexecではないようですか?

別のバージョンのコマンドexec()を使用してみます:作成します:

String command = {"identify -list font", "grep -i -w \'Font: " + fontName + "\'"}

しかし、私はエラーがあります:

Exception in thread "main" java.io.IOException: Cannot run program "identify -list font ": java.io.IOException: error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
    at java.lang.Runtime.exec(Runtime.java:593)
    at java.lang.Runtime.exec(Runtime.java:466)

何が悪いのかアドバイスをいただけますか?どうもありがとう

4

1 に答える 1

7
String[] cmd = {
    "/bin/sh",
    "-c",
    "identify -list font | grep -i -w \'Font: "  + name + "\'"
};

Process p = Runtime.getRuntime().exec(cmd);

シェルを介してコマンドを渡します。|以来、あなたが必要とするものはどれですか (パイプ) コマンドは、オペレーティング システムではなく、シェルによって提供されます。

于 2012-08-23T17:36:15.050 に答える