首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用7zip扩展文件

使用7zip扩展文件
EN

Stack Overflow用户
提问于 2013-02-16 05:58:12
回答 2查看 797关注 0票数 0

我试图使用7zip扩展一个zip文件,但我一直得到7zip用法的打印输出。

zip存在于c:\temp中

在批处理窗口中成功执行相同命令:

代码语言:javascript
复制
C:\TEMP>7z x "tryThis.zip"

我尝试将workdir路径添加到文件中,但同样没有工作目录,没有任何帮助。-我可以使用CMD/c命令来运行它,但我更喜欢保持代码的整洁

我做错了什么?

谢谢!

代码语言:javascript
复制
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();  
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-16 06:06:56

请看一下Runtime.exec的文档

您实际上想要做的是调用7-zip而不带参数,并提供参数作为您的环境。环境类似于Windows路径等。

因此,您可能希望执行以下操作:

代码语言:javascript
复制
Runtime.getRuntime().exec(new String[]{pathToZipExe, "x", fileName}, null, new File(workingDir));

另一方面,我强烈建议你去看看ZipInputStream,它包含在java中,使用它你也可以解压压缩文件。

干杯

票数 6
EN

Stack Overflow用户

发布于 2013-02-16 06:08:54

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

引号和空格本身并不是参数的一部分:它们用于分隔成argv (稍有保留,对于Windows也是如此:这就是CommandLineToArgW的工作方式,尽管带有引号和空格的完整原始命令行始终可用)。

所以它应该是这样的:

代码语言:javascript
复制
Runtime.getRuntime().exec(new String[]{pathTo7ZipExe, "x", fileName},
                  new String[]{}, new File(workingDir));

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14904026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档