Попытка запустить 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 и программу от имени администратора. Я опубликую код, который проверяет, запускается ли программа от имени администратора, как только я закончу со всем тестированием.

Другие вопросы по тегам