В настоящее время я пытаюсь написать файл Java для de/encoding base64 в оболочке linux. Метод, который я до сих пор является:Ядро вывода ловушки 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 Encoder с Java 8, а также apache-решение, но мне бы очень хотелось, чтобы он работал через командную строку.
Есть ли что-нибудь, что я делаю неправильно?
У вас есть ошибки? Правильна ли команда 'exec'? Это работает, когда вы запускаете ту же команду с терминала? Вы уверены, что он работает без абсолютного пути к исполняемому файлу? Что делает '<<<' и делает это без интерпретатора, такого как' bash'? Почему вы разделяете команду на несколько строковых литералов, что затрудняет их чтение? – Thilo
Все «whys» Thilo плюс почему вы просто не используете команду 'base64' Linux вместо' openssl'? Вы пытаетесь перенаправить ввод с помощью '<<<'? Если это так, вы можете использовать опцию '-in' для' openssl enc'. – mhawke
Спасибо за ответ! Я не получаю никаких ошибок, и команда exec работает для меня. Также он работает, если в командной строке введите команду. Я нашел команду openssl в качестве альтернативы, например. echo QWxhZGRpbjpvcGVuIHNlc2FtZQ == | base64 --decode, потому что, если я использую эхо-сигнал, мой вывод - QWxhZGRpbjpvcGVuIHNlc2FtZQ == | base64 --decode (хотя это также работает для меня, если я набираю его сам в оболочке). Вы правы с расщеплением команды, извините за это ... – tobisetsfire