저는 현재 리눅스 쉘에서 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;
}
유감스럽게도 쉘에 수동으로 입력하면 명령이 작동하지만 출력되지 않습니다.
자바 8 이후의 자바 인코더와 아파치 솔루션을 알고 있지만 커맨드 라인을 통해 실제로 작동시키고 싶습니다.
내가 잘못하고있는 것이 있습니까?
오류를 찾으셨습니까? 'exec' 명령이 맞습니까? 터미널에서 같은 명령을 실행할 때 작동합니까? 실행 파일의 절대 경로없이 작동하는지 확신합니까? '<<<'는'bash'와 같은 통역사 없이는 어떻게 작동합니까? 왜 명령을 여러 개의 문자열 리터럴로 나눠서 읽을 수 없습니까? – Thilo
Thilo의 모든 "whys"플러스 왜'openssl' 대신에'base64' 리눅스 명령을 사용하지 않으시겠습니까? '<<<'를 사용하여 입력을 리디렉션하려고합니까? 그렇다면'-in' 옵션을'openssl enc'에 사용할 수 있습니다. – mhawke
답변 해 주셔서 감사합니다! 나는 어떤 오류도 없으며 exec 명령이 나를 위해 작동하는 것 같다. 또한 쉘에 명령을 입력하면 작동합니다. 나는 예를 들어 openssl 명령을 대안으로 찾았습니다. echo QWxhZGRpbjpvcGVuIHNlc2FtZQ == | base64 - 왜냐하면 내가 echo를 사용한다면, 출력은 QWxhZGRpbjpvcGVuIHNlc2FtZQ ==입니다. base64 --decode (비록 쉘에 직접 입력하면이 기능이 작동합니다.) 명령을 나누는 것이 옳다. 죄송합니다 ... – tobisetsfire