我想压缩文件夹的内容,而不使用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"但也不行。
有人可以帮助我吗?。
感谢您的帮助。
答案 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)
的行为完全相同,其中cmdarray
是command
中所有令牌的数组。更确切地说,使用
command
调用创建的StringTokenizer
将new 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 *'"