私は現在、Linuxシェルにde/encoding base64用のJavaファイルを書き込もうとしています。私が今までに持っている方法は:Java捕捉端末出力
public static String cmdExec(String Base64String) throws java.io.IOException, java.lang.InterruptedException{
String line;
try {
Process p = Runtime.getRuntime().exec("openssl enc -base64 -d <<< " + Base64String);
BufferedReader input = new BufferedReader
(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
output += (line);
}
input.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
System.out.println(output);
return output;
}
残念ながら、シェルに手動で入力するとコマンドが動作していますが、出力されません。
Java 8以降のJava Encoderがあることは知っていますが、Apacheのソリューションもありますが、コマンドラインで実際に動作させたいと思っています。
私が間違っていることはありますか?
エラーが発生しますか? 'exec'コマンドは正しいですか?ターミナルから同じコマンドを実行すると機能しますか?実行ファイルへの絶対パスがないと確実に動作しますか? '<<<'は 'bash'のような通訳なしで動作しますか?コマンドをいくつかの文字列リテラルに分割して読みにくくするのはなぜですか? – Thilo
Thiloの「うわさ」のすべてと、単に 'openssl'の代わりに' base64' Linuxコマンドを使うのはなぜですか?入力を '<<<'でリダイレクトしようとしていますか?そうなら 'openssl enc'に' -in'オプションを使うことができます。 – mhawke
お返事ありがとうございます!私は何の誤りもなく、execコマンドが私のために働くようです。また、自分自身をシェルに入力すると動作します。私はopensslコマンドが、例えば、エコーQWxhZGRpbjpvcGVuIHNlc2FtZQ == |私がエコー1を使用している場合、私の出力はQWxhZGRpbjpvcGVuIHNlc2FtZQ == |ですので、base64 --decodeです。 base64 --decode(これはシェルで自分自身を入力すると動作しますが)。あなたはコマンドの分割で正しいです、それを残念... – tobisetsfire