Попытка запустить rpm2cpio с Java
Я пытался запустить команду в Java, но безуспешно
rpm2cpio <rpmName> | cpio -imdv
Это мой текущий код
public static void decompress() {
System.out.println("Decompression has started");
Archiver archiver = ArchiverFactory.createArchiver(ArchiveFormat.TAR, CompressionType.GZIP);
try {
archiver.extract(autoUpdateFile, tempDestination);
for(File currentRPM: new File("./temp/patches/rpms/").listFiles()) {
if(currentRPM.getName().contains("Data")) {
ProcessBuilder decompressRPM = new ProcessBuilder(
new String[] {"rpm2cpio", currentRPM.getAbsolutePath(), "cpio -idmv"});
Process startDecompression = decompressRPM.start();
InputStream inputFromDecompression = startDecompression.getInputStream();
BufferedReader inputReader = new BufferedReader(new InputStreamReader(inputFromDecompression));
String line = null;
System.out.println("From Input Buffer");
while((line = inputReader.readLine()) != null) {
System.out.println(line);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Decompression ended");
}
Основная идея заключается в том, что у меня есть сжатый файл, который содержит несколько файлов внутри, и в одном из файлов существует список rpms, которые мне нужно распаковать, чтобы получить некоторые данные для обновления проекта.
Есть ли способ, которым я могу выполнить такую команду, или мне нужно использовать библиотеку?
Спасибо.
Обновление: благодаря @Brian мне удалось это исправить, сменив
ProcessBuilder decompressRPM = new ProcessBuilder(
new String[] {"rpm2cpio", currentRPM.getAbsolutePath(), "cpio -idmv"});
Process startDecompression = decompressRPM.start();
в
String[] decompressionCommand = {"/bin/sh", "-c", "rpm2cpio " + currentRPM.getAbsolutePath() + " | cpio -idmv"};
Process startDecompression = Runtime.getRuntime().exec(decompressionCommand);
Но я столкнулся с другой проблемой. Я получаю разрешение отказано. Я буду искать решение и, если найду что-нибудь, я опубликую его здесь для дальнейшего использования.
1 ответ
Кажется, что сейчас все работает отлично. Решение довольно простое, оно работает как с ProcessBuilder, так и с String[]... Runtime.getRuntime.exec(). Поскольку файл, который я пытаюсь распаковать, может быть выполнен только в режиме root, это означает, что мне нужно запустить eclipse и программу от имени администратора. Я опубликую код, который проверяет, запускается ли программа от имени администратора, как только я закончу со всем тестированием.