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

在Java中,如何从相对路径运行可执行文件,java,.net,file-io,processbuilder,Java,.net,File Io,Processbuilder,我使用以下代码执行.Net编译的可执行文件并存储输出。我希望能够将.exe放入另一个包中并运行它。但是,每当我尝试运行代码时,它都会告诉我,由于我没有放置文件的完整路径,因此找不到该文件。有没有一个简单的方法来解决这个问题,比如将它包含在类路径中或者我缺少的东西中 public class ActiveDirectoryQuery { private String email = ""; public ActiveDirectoryQuery(){} public v

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

如果位置是相对于类文件的(这是您在注释中说的;但是…您确定吗?这很不寻常),请尝试通过以下方式获取绝对路径:

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

process builder中的路径与类路径或包无关。它只是希望exe位于您指定的目录中

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


还请记住,如果希望目录是一个相对路径,请去掉该目录的前导斜杠。

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

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

获取该文件的路径。

相对于什么?回想一下,“当前目录”概念在Java中不是很有用。相对于类FileName,看起来我必须为它编写一个安装程序。注意:URL.getFile()不返回文件名!它翻转URL的路径部分。例如,在Windows XP上,它可能返回
“/C:/Documents%20和%20Settings/vgr/src/myapp/build/EmailFQDN.exe”
,这显然不是一个存在的文件。改用
新文件(url.toURI())