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