java Runtime.getRunTime (). exec & wildcards? - PullRequest
       12

java Runtime.getRunTime (). exec & wildcards?

11 голосов
/ 21 января 2010

Я пытаюсь удалить ненужные файлы, используя

Process p = Runtime.getRuntime().exec();

работает нормально, пока я не использую подстановочные знаки, т.е. это работает:

Process p = Runtime.getRuntime().exec("/bin/rm -f specificJunkFile.java");

, в то время как следующее выдает «Нет такого файла или каталога»:

Process p = Runtime.getRuntime().exec("/bin/rm -f *.java");

Я должен быть в состоянии сделать все хорошие вещи, как указано здесь , верно?

Ответы [ 5 ]

13 голосов
/ 29 ноября 2011

После долгих поисков я нашел это: http://www.coderanch.com/t/423573/java/java/Passing-wilcard-Runtime-exec-command

Runtime.exec(new String[] { "sh", "-c", "rm /tmp/ABC*" });
9 голосов
/ 21 января 2010

Это символы Bash. Они интерпретируются в оболочке Bash. Вы запускаете rm напрямую, поэтому нет оболочки для интерпретации * как «всех файлов».

Вы можете использовать bash в качестве команды. e.g.:

Runtime.getRuntime().exec("/path-to/bash -c \"rm *.foo\"")

8 голосов
/ 21 января 2010

Могу ли я предложить вам, чтобы Java сделала это для вас?

  • Используйте file.listFiles (), чтобы получить список файлов
  • Используйте file.getName (). Содержит (строку), чтобы отфильтровать их при необходимости
  • перебрать массив, выполняющий file.delete ()

Преимущество: улучшенная мобильность, экономия затрат на исполнение ()

2 голосов
/ 03 декабря 2014

Runtime.getRuntime (). Exec (новая строка [] {"sh", "-c", "gunzip * .gz"});

0 голосов
/ 01 июня 2013
  1. Использовать exec (String [] {cmd, arg1, arg2 ...)

  2. Вот полный пример получения результата в виде строки: Ссылка .

...