2015-10-24 4 views
2

Простой пример - cd в каталог с более чем двумя словами. Когда я запускаю код ниже, я не получаю ожидаемую ошибку: /usr/bin/cd: line 2: cd: /Directory With Two Words: No such file or directory, но эта ошибка: /usr/bin/cd: line 2: cd: '/Directory: No such file or directory. Поэтому кажется, что он игнорирует апострофы и просто ищет каталог под названием «Каталог».Runtime Exec, кажется, игнорирует апострофы

Код:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Test 
{ 
    public static void main(String []args) 
    { 
     try 
     { 
      Process p = Runtime.getRuntime().exec("cd '/Directory With Two Words'"); 
      BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); 

      // read any errors from the attempted command 
      System.out.println("Error:"); 
      String s = null; 
      while ((s = stdError.readLine()) != null) 
      { 
       System.out.println(s); 
      } 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

ответ

2

Вы должны использовать метод exec(String[]) это намного безопаснее. Так это должно работать без кавычек или апострофов:

Runtime.getRuntime().exec(new String[] {"cd", "/Directory With Two Words"}); 

Также стоит взглянуть на прекрасную статью на JavaWorld When Runtime.exec() won't.