2013-10-08 38 views
0

我正在使用以下代碼來執行.Net編譯的可執行文件並存儲輸出。我希望能夠將.exe放入另一個包中並運行它。然而,無論何時我嘗試運行我的代碼,它都告訴我文件沒有找到,因爲我沒有將文件的完整路徑。有沒有簡單的方法來解決這個問題,比如將其包含在類路徑中或我缺少的東西。如何從Java中的相對路徑運行可執行文件

public class ActiveDirectoryQuery { 
    private String email = ""; 
    public ActiveDirectoryQuery(){} 


    public void setEmail(String host){ 
     this.email = host; 
    } 

    public String getEmail(){ 
     return this.email; 
    } 
    public String getUserName() throws IOException{ 
     Process process = new ProcessBuilder(
     "/relative/path/to/EmailFQDN.exe", this.email).start(); 
     InputStream is = process.getInputStream(); 
     InputStreamReader isr = new InputStreamReader(is); 
     BufferedReader br = new BufferedReader(isr); 
     String line; 
     String fullOutput= ""; 
     while ((line = br.readLine()) != null) { 
     System.out.println(line); 
     fullOutput=fullOutput+line+"\n"; 
     } 
     return fullOutput; 
    } 
} 
+0

相對於什麼?回想一下,「當前目錄」的概念在Java中並不是很有用。 – leonbloy

+0

相對於類文件 –

+0

老實說,看起來我必須爲它編寫一個安裝程序。 –

回答

1

如果exe文件是在同一個包中的類文件,你可以這樣做:

ActiveDirectoryQuery.class.getResource("/EmailFQDN.exe").getFile() 

獲得該文件的路徑。

+0

這就像一個魅力 –

+1

**小心**:URL.getFile()*不*返回文件名!它將變成URL的*路徑部分*。例如,在Windows XP上,它可能會返回'「/C:/Documents%20and%20Settings/vgr/src/myapp/build/EmailFQDN.exe」,這顯然不是一個存在的文件。改用'new File(url.toURI())'。 – VGR

1

如果該位置是相對於類文件(這是你在評論中說,但是你...你確定這是相當不尋常的?),嘗試通過獲得的絕對路徑:

URL exe = ActiveDirectoryQuery.class.getResource("relative/path/to/EmailFQDN.exe"); 
File exefile = new File(exe.getPath()); 
0

流程構建器中的路徑與類路徑或包無關。它只是希望exe文件位於您指定的目錄中。

如果您使用的是相對路徑,那麼您需要指定相對於java進程當前工作目錄的路徑。如果你是從命令行運行它,那麼它將是你開始進程時的任何目錄。

還記得擺脫目錄上的前導斜槓,如果你想它是一個相對路徑。

相關問題