带有" *"的Java运行时exec zip命令字符

时间:2015-12-07 03:46:46

标签: java linux

我想压缩文件夹的内容,而不使用Java Runtime

包含文件夹

例如:zip文件夹/ home / duyvt / example

在终端中,我执行以下命令,它运行良好。 Archive.zip将仅包含示例文件夹的内容。

  

$ cd / home / duyvt / example。

     

$ zip -r /home/duyvt/archive.zip *

但是在Java Runtime中,它不起作用。

Runtime.getRuntime().exec("zip -r /home/duyvt/archive.zip *", null, new File("/home/duyvt/example"));

似乎Java Runtime不理解" *"字符。

我也试过使用" ProcessBuilder"但也不行。

有人可以帮助我吗?。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在Linux上, shell 可以理解和扩展*
在Windows上,命令程序必须自己完成。

Java是通用的,不实现shell功能。

如果您想要shell功能,请通过shell运行命令,例如

sh -c 'zip -r /home/duyvt/archive.zip *'

<强>更新

来自exec(String command, String[] envp, File dir)的javadoc:

  

这是一种方便的方法。调用exec(command, envp, dir)形式的行为与调用exec(cmdarray, envp, dir)的行为完全相同,其中cmdarraycommand中所有令牌的数组。

     

更确切地说,使用command调用创建的StringTokenizernew StringTokenizer(command)字符串分解为标记,而不进一步修改字符类别。然后,由标记生成器生成的标记以相同的顺序放置在新的字符串数组cmdarray中。

由于StringTokenizer无法使用''了解shell引用,因此该命令被错误地拆分,您必须自己完成:

Runtime.getRuntime().exec(new String[] { "sh",
                                         "-c",
                                         "zip -r /home/duyvt/archive.zip *" },
                          null, new File("/home/duyvt/example"));

答案 1 :(得分:0)

启动shell并传递一个命令,如下所示:

"sh -c 'zip -r /home/duyvt/archive.zip *'"