1

Java から以下のコマンドを実行する必要があります

echo <inputMessage> | iconv -f utf8 -t Cp930

以下のコードを使用してコマンドを実行すると、エコー部分のみが実行されますが、パイプは発生していません

public static String callInconverter2(String input,String codePage) throws IOException {
        try{
        //  String command = "echo asdasdasd | iconv -f UTF-8 -t Cp930";
            Process p = Runtime.getRuntime().exec("echo "+input+"| iconv -f UTF-8 -t "+codePage);
        String s = null;
        BufferedReader stdInput = new BufferedReader(new 
                 InputStreamReader(p.getInputStream()));

            BufferedReader stdError = new BufferedReader(new 
                 InputStreamReader(p.getErrorStream()));
            StringBuilder sb = new StringBuilder();
            // read the output from the command
            System.out.println("Here is the standard output of the command:\n");
            while ((s = stdInput.readLine()) != null) {
                sb.append(s);
            }

            // read any errors from the attempted command
            System.out.println("Here is the standard error of the command (if any):\n");
            while ((s = stdError.readLine()) != null) {
                sb.append(s);
            }
            return sb.toString();

        }
        catch (IOException e) {
            System.out.println("exception happened - here's what I know: ");
            e.printStackTrace();
            return e.getMessage();
        }
            }}

私はランタイムが初めてです。不足しているものはありますか。

トーマスが提案した方法を試しました

String command = "echo asdasdasd | iconv -f UTF-8 -t Cp930";
Process p = Runtime.getRuntime().exec("bash -c \""+command+"\"");

エラーが発生しました

見逃しているものはありますか

4

1 に答える 1

3

bash、tcsh、または通常使用するコマンドでシェルを実行します。

bash -c "echo | iconv -f utf8 -t Cp930"                 // or
bash -lc "echo | iconv -f utf8 -t Cp930"

パイピングはシェル機能です。

したがって:

Runtime rt = Runtime.getRuntime();
String cmd = "echo | iconv -f utf8 -t Cp930";
rt.exec("bash -c \""+cmd+"\"");

bash呼び出しオプション については、マニュアルを参照してください。http://www.gnu.org/software/bash/manual/html_node/Invoking-Bash.html#Invoking-Bash

于 2013-05-16T05:48:48.383 に答える