2014-07-10 3 views
0

현재 디렉토리에 fingerVerification_fdu03이라는 실행 파일이 있습니다. 나는 ProcessBuilder를을 사용하여 Java에서 해당 실행 파일을 실행하려면, 그래서 내가 할 :ProcessBuilder를 사용하여 Java에서 실행 파일 실행

Process pb = new ProcessBuilder("fingerVerification_fdu03").start(); 

것은는 자바 프로그램과 동일한 디렉토리에있는 경우에도 파일을 찾을 수 있다고 말하고 그러나. 일반적으로 리눅스 터미널을 통해 단순히 fingerVerification_fdu03 명령을 실행할 수 있습니다 :

./fingerVerification_fdu03 

그리고 실행됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

업데이트 :

나는이 디렉토리를 추가하려고 시도했지만 여전히 동일한 문제가 발생했습니다. 내가 한 :

String workingDirectory = new String(System.getProperty("user.dir")); 
    File tempDir = new File(workingDirectory); 
    Process p = new ProcessBuilder("fingerVerification_fdu03"). 
    directory(new File(workingDirectory+"//")).start(); 

fingerVerification_fdu03 파일의 확장에 문제가있을 수 있습니까? 내가 가진 확장 기능을 찾는 방법을 모르겠습니다. 이진 파일이며 확장명을 나열하지 않습니다.

답변

1

귀하의 PATH에 해당 디렉토리가 반영되어 있지 않으므로 현재 디렉토리를 지정하여 프롬프트에서 명령을 실행하십시오.

따라서 ProcessBuilder 호출에 PATH을 (직접 또는 간접적으로) 설정해야합니다. 예 : environment() 메소드가 리턴 한 환경 맵에서 PATH를 수정하거나 절대 또는 상대 디렉토리 경로를 반영하도록 실행 파일 이름을 수정할 수 있습니다 (명령 행에서 수행하는 것처럼)

실행 파일 당신의 Java 프로그램과 같은 디렉토리에서 당신은 어떻게 든 디렉토리를 지정하지 않고도 실행할 수 있다는 것을 의미하지는 않습니다. PATH에는 기본적으로 현재 디렉토리 (.)가 포함되어 있지 않으며 보안상의 이유로 그럴 필요가없는 인수가 있습니다.

+0

또는 실행 파일의 절대 경로 만 지정하면됩니다. –

+0

예. 그것이 PATH를 명시 적으로 또는 묵시적으로 수정하여 의미하는 바입니다. Answer –

+0

Java 프로그램을 실행하고있는 디렉토리에서 실행중인 디렉토리라도 지정해야합니까? – user1410668

0

FileNotFoundException을 생성 할 수있는 두 가지 가능성은 첫째로 파일이 지정된 폴더에서 실제로 발견되지 않기 때문에 올바른 폴더에서 Java 프로그램을 실행하는지 확인하거나 실행 파일의 절대 경로를 지정하십시오 . 두 번째 가능성은 권한의 문제이므로 유효한 권한을 가진 사용자로 Java 프로그램을 실행하는지 확인하십시오.

관련 문제