2015-12-07 24 views
0

我希望自己使用的Java RuntimeJava運行時Exec用zip命令 「*」 字符

例如,要壓縮文件夾的內容,而不包括文件夾,它就是zip文件夾中的/ home/duyvt /例如

在終端,我執行下面的命令,它運行良好。 Archive.zip將僅包含示例文件夾的內容。

$ cd/home/duyvt/example。

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

但在Java運行時,這是行不通的。

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

看來Java Runtime不理解「*」字符。

我也嘗試使用「ProcessBuilder」,但不能工作。

有沒有人可以幫助我?

感謝您的任何幫助。

回答

0

在Linux上,它是shell,它理解並擴展*
在Windows上,命令程序必須自行完成。

Java是通用的,並且不實現shell功能。

如果您需要shell功能,請通過shell運行命令,例如,

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

UPDATE

exec(String command, String[] envp, File dir)的Javadoc:

這是一個方便的方法。調用形式爲exec(command, envp, dir)的行爲與調用exec(cmdarray, envp, dir)的行爲完全相同,其中cmdarraycommand中所有令牌的陣列。

更確切地說,command字符串被分解爲使用調用new StringTokenizer(command)創建的StringTokenizer的令牌,而不進一步修改字符類別。然後將令牌生成器生成的令牌以相同的順序放入新字符串數組cmdarray中。

由於StringTokenizer不理解的外殼採用''報價,命令被錯誤地分裂,你必須做你自己:

​​3210
+0

我試過你的建議,但它不工作。 Runtime.getRuntime()。exec(「sh -c'zip -r/home/duyvt/archive。zip *'「,null,new File(」/ home/duyvt/example「)); –

+0

非常感謝Andreas,問題已經解決。 –

0

啓動外殼,併爲其傳遞命令,像所以:

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