我试过在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);
但我最后遇到了另一个问题。我被拒绝了。我将寻找解决方案,如果我发现了什么,我会在这里发布以供将来参考。
它似乎现在工作得很好。解决方案非常简单,它适用于ProcessBuilder和String [] ... Runtime.getRuntime.exec()。由于我尝试解压缩的文件只能在root用户时完成,这意味着我需要以管理员身份运行eclipse和程序。我将在完成所有测试后立即发布检查程序是否以管理员身份运行的代码。