0

我正在使用以下代码来执行 .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;
    }
}
4

3 回答 3

1

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

URL exe = ActiveDirectoryQuery.class.getResource("relative/path/to/EmailFQDN.exe");
File exefile = new File(exe.getPath());
于 2013-10-08T17:28:14.333 回答
1

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

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

获取该文件的路径。

于 2013-10-08T17:32:24.503 回答
0

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

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

如果你希望它是一个相对路径,还记得去掉目录上的前导斜杠。

于 2013-10-08T17:28:44.020 回答