使用7zip扩展文件

时间:2013-02-15 21:58:12

标签: java 7zip

我正在尝试使用7zip扩展zip文件,但我一直在获取7zip Usage打印输出。

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();  

2 个答案:

答案 0 :(得分:6)

请查看Runtime.exec

的文档

您实际上要做的是调用不带参数的7-zip并将参数作为您的环境提供。环境就像Windows PATH等。

所以你可能想做类似的事情:

Runtime.getRuntime().exec(new String[]{pathToZipExe, "x", fileName}, null, new File(workingDir));

另一方面,我强烈建议您查看java中包含的ZipInputStream - 使用它还可以解压缩zip文件。

干杯

答案 1 :(得分:1)

你正在调用exec的重载,它接受envp数组作为第二个参数。这个envp数组根本不用于参数,所以实际上你没有传递任何参数:这就是你获得用法打印输出的原因。

引号和空格本身不是参数的一部分:它们用于分隔成argv(对于少量保留,对于Windows也是如此:CommandLineToArgW的工作原理,即使完整的原始命令带引号和空格的行总是可用的。)

所以它应该是这样的:

Runtime.getRuntime().exec(new String[]{pathTo7ZipExe, "x", fileName},
                  new String[]{}, new File(workingDir));

(太糟糕了,我不懂Java,所以代码可能是单一的,但它应该有效。)