2014-05-16 2 views
3

나는 perl을 처음 사용하지만 jar 파일에있는 perl 스크립트를 실행하는 중에 문제가있는 java에서 프로그래밍을했다.jar 파일에있는 perl 스크립트 파일 실행하기

나는 창문을 사용하고 있으며 한 유형의 파일을 다른 유형으로 변환하기 위해 펄 스크립트를 작성했습니다.

나는 런타임을 사용하여 자바 프로그램으로 펄 스크립트를 확인하고 난 같은 실행할 수 있어요 필요에 따라 그리고 난 내가 만든

(cmd를 줄을 사용) 출력뿐만 아니라 파일을 변환 무엇입니까 Java에서 GUI를 사용하여 대상 파일로 변환 할 파일을 가져옵니다. Netbeans IDE에서 파일을 실행할 수 있습니다.

하지만 jar 파일을 실행할 때.

URL을 사용하여 perl 스크립트의 URL을 얻으려고합니다.

URL url = this.getClass().getResource("/com/MyProject/FileConverter/fileconverter.pl"); 

및 런타임 스크립트를 실행하기위한

:

String[] cmd = {"perl",path,input_file,output_file}; 
process = Runtime.getRuntime().exec(cmd); 

문제를 해결 도와주세요. 기본적으로 나는 우리가 실행하고있는 것과 동일한 jar 파일에있는 펄 스크립트를 어떻게 실행할 수 있는지 알아야한다.

답변

3

당신은


관련 항목

    을 자원으로하는 펄 파일을 읽고 (같은 this를) File로 파일 시스템에 어딘가를 작성하고 다음 명령에 해당 경로를 통과해야합니다
  • Extract and load DLL from JAR
+0

이 감사와 getResourceAsStream에서 스크립트의 경로가 시작되지해야합니다

중요주의 :

이것은 더 나은 코드의 조각 설명 .. –

3

나는 당신이 hav e jar 파일의 펄 스크립트 파일을 압축 해제하지 않으려면 "내부에서"실행하십시오.

"리소스"(perl 스크립트)의 "스트림"을 얻은 다음 프로세스의 표준 입력에 스크립트를 작성하여 "perl"을 실행하십시오. 그것은 나를 위해 일한 .. /

// Start the process "perl" 
Process process = Runtime.getRuntime().exec("perl"); 

// get the script as an InputStream to "inject" it to perl's standard input 
try (
     InputStream script = ClassLoader.getSystemClassLoader() 
       .getResourceAsStream("com/MyProject/FileConverter/fileconverter.pl"); 
     OutputStream output = process.getOutputStream() 
) { 

    // This is to "inject" your input and output file, 
    // as there is no other easy way ot specify command line arguments 
    // for your script 
    String firstArgs = "$ARGV[0] = \"" + input_file + "\";\n" + 
         "$ARGV[1] = \"" + output_file + "\";\n"; 
    output.write(firstArgs.getBytes()); 


    // send the rest of your cript to perl 
    byte[] buffer = new byte[2048]; 
    int size; 
    while((size = script.read(buffer)) != -1) { 
     output.write(buffer, 0, size); 
    } 
    output.flush(); 

} 

// just in case... wait for perl to finish 
process.waitFor(); 
+0

그래, 좋은 생각처럼 들리 겠지만 .. 시도해볼거야 .. 공유해 주셔서 감사합니다 .. –