如何从Java中的相对路径运行可执行文件

时间:2013-10-08 17:18:48

标签: java .net file-io processbuilder

我使用以下代码执行.Net编译的可执行文件并存储输出。我希望能够将.exe放在另一个包中并运行它。但是,每当我尝试运行我的代码时,它告诉我由于我没有将完整路径放到文件中而找不到该文件。有没有一种简单的方法来解决这个问题,比如将它包含在类路径中或者我缺少的东西中。

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;
    }
}

3 个答案:

答案 0 :(得分:1)

如果位置是相对于类文件的(这是你在评论中说的那样;但是......你确定吗?这很不寻常),试着通过以下方式获取绝对路径:

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

答案 1 :(得分:1)

如果exe文件与类文件位于同一个包中,则可以执行以下操作:

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

获取该文件的路径。

答案 2 :(得分:0)

进程构建器中的路径与类路径或包无关。只是期望exe位于您指定的目录中。

如果使用相对路径,则需要指定相对于java进程当前工作目录的路径。如果从命令行运行它,则它将是您启动该过程时所处的目录。

还要记住,如果你想让它成为一个相对路径,那就去除目录上的前导斜杠。