Я пытаюсь запустить следующую команду:
gpg -e -r recipientname file.txt
через Java с использованием API ProcessBuilder. Код будет использоваться в работе календаря позже.
если я запускаю команду из командной строки, я получаю следующий вывод:
gpg: [undisclosed]: There is no assurance this key belongs to the named user
sub rsa2048/[undisclosed] 2019-03-22 [undisclosed] <[undisclosed]>
Primary key fingerprint: [undisclosed]
Subkey fingerprint: [undisclosed]
It is NOT certain that the key belongs to the person named
in the user ID. If you *really* know what you are doing,
you may answer the next question with yes.
Use this key anyway? (y/N)
Я ввожу 'y', и мой зашифрованный файл генерируется.
Если я делаю то же самое с использованием Java следующим образом:
ProcessBuilder builder = new ProcessBuilder("gpg", "-e", "-r", "recipientname", "test.txt")
.directory(new File("."))
.redirectErrorStream(true);
final Process process = builder.start();
OutputStream output = process.getOutputStream();
output.write("y".getBytes());
output.flush();
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
System.out.println(line);
}
System.out.println("test");
process.waitFor();
Я получаю только первую строку вывода:
gpg: [undisclosed]: There is no assurance this key belongs to the named user
и JVM висит навсегда. Я подозреваю, что gpg запускает еще один подпроцесс под капотом, который генерирует все дополнительные выходные данные и запрашивает подтверждение пользователя, и если это так, я задаюсь вопросом, могу ли я в любом случае перехватить подпроцесс и взаимодействовать с ним из в моем коде Java?
Обратите внимание, что я предпочитаю по возможности избегать использования сторонних библиотек.