2015-12-07 3 views
0

Я хочу, чтобы пронестись содержимое папки, не включая папки это сам с помощью Java RuntimeJava среда Exec зип команда с «*» характер

Например: Архивная папка/Home/duyvt/пример

В терминале, Я выполняю следующие команды, и он работает хорошо. Archive.zip будет содержать только содержимое папки примеров.

$ cd/home/duyvt/example.

$ зип -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

В Linux это shell, который понимает и расширяет *.
В Windows командная программа должна сделать это сама.

Java является общим и не реализует функциональные возможности оболочки.

Если вы хотите использовать функциональность оболочки, запустите команду через оболочку, например.

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

UPDATE

От Javadoc из exec(String command, String[] envp, File dir):

Это удобный метод. Вызов формы exec(command, envp, dir) ведет себя точно так же, как вызов exec(cmdarray, envp, dir), где cmdarray представляет собой массив всех токенов в command.

Более точно, строка command разбита на токены, используя StringTokenizer, созданный по вызову new StringTokenizer(command) без дополнительной модификации категорий символов. Токены, созданные токенизатором, затем помещаются в новый массив строк cmdarray в том же порядке.

Поскольку StringTokenizer не понимает оболочки квотирование с помощью '', команда разделена неправильно, и вы должны сделать это сами:

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

Я пробовал ваше предложение, но оно не работает. Runtime.getRuntime(). Exec ("sh -c" zip -r/home/duyvt/archive.zip * '", null, new File ("/home/duyvt/example ")) –

+0

Большое спасибо Андреасу. Проблема решена. –

0

Начало оболочки и передать его команду, как так:

"sh -c 'zip -r /home/duyvt/archive.zip *'" 
Смежные вопросы