2014-12-02 2 views
1

내가Runtime.exec의()는 디렉토리에 공간 (자바)와 함께 실패

private static File jarLocation = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParentFile(); 

다음

를 호출하여 파일의 위치를 ​​얻어서 내 jar 파일과 같은 디렉토리에 프로세스를 실행하는 것을 시도하고있다
Runtime.getRuntime().exec("command", null, jarLocation); 

일반적으로 잘 작동하지만 경로에 공백이 있으면 "디렉토리 이름이 유효하지 않습니다"라는 메시지가 나타납니다. 공간의 ASCII 16 진수가 20이기 때문에 "% 20"으로 공백을 대체 한 디렉토리의 경로를 인쇄하는 디버그 코드를 추가하려고했습니다. 그 경로에 공백이있는 디렉토리를 사용할 수있는 방법이 있습니까?

+0

실제 공간에 % 20을 (를) 바꿔야합니다. 그것들은 URL 인코딩의 결과입니다. 편집 : http://stackoverflow.com/a/12733172/995891을 참조하십시오. – zapl

+0

스택 추적을 포함한 전체 오류를 포함 할 수 있습니까? 어떤 OS를 실행하고 있습니까? 그리고 실제'command' 문자열은? 이 형식의 Runtime.exec()에 토큰 화되어 거기에 문제가있을 수 있습니다. –

+0

@AndrewJanke 실행중인 명령이 아무런 차이가없는 것 같습니다. 나는 Windows 7과 Linux (Ubuntu)에서 이것을 시도했지만 별다른 차이가없는 것 같습니다. 나는 단지 명령에 문자열을 전달할 뿐이다. – user2248702

답변

1

getPath() 전화는 URL.getPath()이며 파일 시스템 경로를 반환하지 않습니다. URL의 경로 부분을 반환합니다. URL이 file: 인 경우 URL로 인코딩 된 로컬 파일 시스템 경로가됩니다. 원본 URL이 실제로 file: URL 인 경우 Runtime.exec()이 작업 할 수있는 로컬 파일 시스템 경로로 변환하려면 URI 및 URL 클래스 또는 사용자 정의 문자열 처리를 사용해야합니다.

귀하의 경우에 직접 적용될 수 있습니다.

Converting Java file:// URL to File(...) path, platform independent, including UNC paths에서 토론을 볼 수도 있습니다.