2014-05-16 62 views
3

我是perl的新手,但是在java中面對運行jar文件中存在的perl腳本時遇到了一些問題。運行jar文件中存在的perl腳本文件

我正在使用Windows,並且我寫了一個perl腳本來將一種類型的文件轉換爲另一種類型。

我已經檢查使用運行時與Java程序的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文件中存在的perl腳本。

回答

3

您必須閱讀是Perl文件作爲資源和它的地方寫文件系統爲File(如this),然後該路徑傳遞給你的命令


請參見

+0

謝謝。它爲我工作.. –

3

我假設你甲肝e你的jar文件中有perl腳本文件,你不想提取它,只需從「裏面」執行它。

一個解決方案是獲取「資源」(您的perl腳本)的「流」,然後執行「perl」在流程的標準輸入中編寫腳本。

這是更好地與一段代碼解釋:

重要的警告:在getResourceAsStream路徑到您的腳本不應該開始與/

// 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

耶聽起來像個好主意,會試試看..謝謝分享.. –