我尝试过在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");
}主要的想法是,我有一个压缩文件,其中包含多个文件,其中一个文件中存在一个rpm列表,我需要解压缩以获取一些数据来更新项目。
有没有什么方法可以运行这样的命令,或者我需要使用库?
谢谢。
更新:多亏了@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);但我最终遇到了另一个问题。我的许可被拒绝了。我会到处寻找解决方案,如果我找到了什么,我会把它贴在这里供将来参考。
发布于 2018-03-07 03:06:34
看起来它现在运行得很好。解决方案非常简单,它同时适用于ProcessBuilder和String[]……Runtime.getRuntime.exec()。由于我试图解压缩的文件只能在root身份下完成,这意味着我需要以管理员身份运行eclipse和程序。一旦我完成了所有的测试,我就会发布检查程序是否正在以管理员身份运行的代码。
https://stackoverflow.com/questions/49119254
复制相似问题