Java의 공간은 OS X의 경로를 실행합니다
문제
OS X에서는 .Exec 무언가를 시도하고 있지만 경로에 공간이 포함되어 있으면 작동하지 않습니다. 나는 따옴표로 경로를 둘러싸고, 공간을 피하고, u0020을 사용해 보았습니다.
예를 들어, 이것은 작동합니다.
Runtime.getRuntime().exec("open /foldername/toast.sh");
그러나 공간이 있다면이 작업 중 어느 것도 없습니다.
Runtime.getRuntime().exec("open /folder name/toast.sh");
Runtime.getRuntime().exec("open \"/folder name/toast.sh\"");
Runtime.getRuntime().exec("open /folder\\ name/toast.sh");
Runtime.getRuntime().exec("open /folder\u0020name/toast.sh");
아이디어?
편집 : 백 슬래시를 탈출했습니다 ... 여전히 작동하지 않습니다.
해결책
이 문제에 대한 요약이 있습니다 Sun의 포럼... OS X에 국한되지 않은 꽤 일반적인 문제인 것 같습니다.
스레드의 마지막 게시물에는 제안 된 솔루션이 요약되어 있습니다. 본질적으로, 형태를 사용하십시오 Runtime.exec
그게 걸립니다 String[]
정렬:
String[] args = new String[] { "open", "\"/folder name/toast.sh\"" };
또는 (포럼에서도 이것이 효과가 있다고 제안합니다)
String[] args = new String[] { "open", "folder name/toast.sh" };
다른 팁
이 시도:
Runtime.getRuntime().exec("open /folder\\ name/toast.sh");
""는 문자열에 공간을 넣지 만 ""는 문자열에 ""를 넣고 껍질로 전달되며 쉘은 공간을 피할 것입니다.
그래도 작동하지 않으면 인수를 배열로 전달하고 각 인수에 대해 하나의 요소를 전달하십시오. 그렇게하면 껍질이 관여하지 않으며 기괴한 탈출이 필요하지 않습니다.
Runtime.getRuntime().exec(new String[]{"open", "/folder name/toast.sh"});
Paul의 옵션은 작동하지만 여전히 공간을 피해야합니다.
Runtime.getRuntime().exec(new String[]{"open", "/folder\\ name/toast.sh"});
문자열 배열 사용에 대해 짜증나는 것은 각 매개 변수와 그 옵션이 자체 요소에 있어야한다는 것입니다. 예를 들어이 작업을 수행 할 수 없습니다.
Runtime.getRuntime().exec(new String[]{"executable", "-r -x 1", "/folder\\ name/somefile"});
대신 그렇게 지정해야합니다.
Runtime.getRuntime().exec(new String[]{"executable", "-r", "-x", "1", "/folder\\ name/somefile"});
제휴하지 않습니다 StackOverflow