我使用以下代码执行.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;
}
}
答案 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进程当前工作目录的路径。如果从命令行运行它,则它将是您启动该过程时所处的目录。
还要记住,如果你想让它成为一个相对路径,那就去除目录上的前导斜杠。