我试图使用7zip扩展一个zip文件,但我一直得到7zip用法的打印输出。
zip存在于c:\temp中
在批处理窗口中成功执行相同命令:
C:\TEMP>7z x "tryThis.zip"我尝试将workdir路径添加到文件中,但同样没有工作目录,没有任何帮助。-我可以使用CMD/c命令来运行它,但我更喜欢保持代码的整洁
我做错了什么?
谢谢!
String pathTo7ZipExe = "c:\\program files\\7-zip\\7z.exe";
String fileName ="tryThis.zip";
String workingDir = "c:\\temp\\";
Process process = Runtime.getRuntime().exec(
new String[]{pathTo7ZipExe},
new String[]{" x \"" + fileName +"\""},
new File(workingDir));
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
// wait for zip to end.
int exitVal = process.waitFor(); 发布于 2013-02-16 06:06:56
请看一下Runtime.exec的文档
您实际上想要做的是调用7-zip而不带参数,并提供参数作为您的环境。环境类似于Windows路径等。
因此,您可能希望执行以下操作:
Runtime.getRuntime().exec(new String[]{pathToZipExe, "x", fileName}, null, new File(workingDir));另一方面,我强烈建议你去看看ZipInputStream,它包含在java中,使用它你也可以解压压缩文件。
干杯
发布于 2013-02-16 06:08:54
您正在调用exec的重载,它接受envp数组作为第二个参数。这个envp数组根本不是用于参数的,所以实际上您没有传递任何参数:这就是为什么要打印用法的原因。
引号和空格本身并不是参数的一部分:它们用于分隔成argv (稍有保留,对于Windows也是如此:这就是CommandLineToArgW的工作方式,尽管带有引号和空格的完整原始命令行始终可用)。
所以它应该是这样的:
Runtime.getRuntime().exec(new String[]{pathTo7ZipExe, "x", fileName},
new String[]{}, new File(workingDir));(太糟糕了,我不懂Java,所以代码可能是统一的,但它应该可以工作)。
https://stackoverflow.com/questions/14904026
复制相似问题