我正在尝试在当前包外部的路径中运行exe文件。我运行它的code.java文件在
%Workspace_path%\Project\src\main\java\com\util\code.java
但是exe所在的目录
%Workspace_path%\Project\src\main\resources\program.exe
如果可能的话,似乎最好的解决方案是获取Project的绝对路径,然后在其中添加“ src \ main \ resources
\”。有什么好方法吗?或者有替代的解决方案?我正在使用Eclipse,但如果也可以在其他IDE中使用它,那就太好了。谢谢你的帮助。
解决此问题的实际方法是将EXE捆绑为类路径资源。看来您已经为此做好了准备。
使用类路径资源时,成熟的程序不应假定该资源位于文件系统中。资源可以打包在JAR文件中,甚至打包在WAR文件中。此时,您唯一可以信任的就是访问Java资源的标准方法,如下所示。
然后,解决问题的方法是使用实际的调用标准Class.getResourceAsStream
(或ClassLoader.getResourceAsStream
)访问资源内容,将内容保存到临时文件中,然后从该文件执行。这将确保您的程序无论其包装如何都能正常工作。
换一种说法:
getClass().getResourceAsStream("/program.exe")
。从静态方法中,您无法调用getClass
,因此请改为使用当前类的名称,如中所述MyClass.class.getResourceAsStream
。这会传回InputStream
。File.createTempFile
。这将返回一个File
标识新创建文件的对象。OutputStream
此临时文件。IOUtils.copy
如果您喜欢Apache Commons工具,则可以使用。完成此步骤后,不要忘记关闭两个流。换句话说(稍后添加了代码段):
private void executeProgramFromClasspath() throws IOException {
// Open resource stream.
InputStream input = getClass().getResourceAsStream("/program.exe");
if (input == null) {
throw new IllegalStateException("Missing classpath resource.");
}
// Transfer.
OutputStream output = null;
try {
// Create temporary file. May throw IOException.
File temporaryFile = File.createTempFile(getClass().getName(), "");
output = new FileOutputStream(temporaryFile);
output = new BufferedOutputStream(output);
IOUtils.copy(input, output);
} finally {
// Close streams.
IOUtils.closeQuietly(input);
IOUtils.closeQuietly(output);
}
// Execute.
try {
String path = temporaryFile.getAbsolutePath();
ProcessBuilder processBuilder = new ProcessBuilder(path);
Process process = processBuilder.start();
process.waitFor();
} catch (InterruptedException e) {
// Optional catch. Keeps the method signature uncluttered.
throw new IOException(e);
} finally {
// Clean up
if (!temporaryFile.delete()) {
// Log this issue, or throw an error.
}
}
}
问题内容: 嗨,我需要使用FileInputStream读取文件,但是我没有获得正确的路径。我的文件位于C:\ Users \ tester \ Documents \ Java Project \ Samples \ ProjectOne \ src \ pdfReader中。但是,当我使用以下代码时,我得到的错误路径是“ / C:/ Users / tester / Documents / J
本文向大家介绍获取Java中目录或文件的绝对路径,包括了获取Java中目录或文件的绝对路径的使用技巧和注意事项,需要的朋友参考一下 方法java.io.File.getAbsolutePath()用于获取字符串形式的文件或目录的绝对路径名。此方法不需要任何参数。 演示此的程序如下所示- 示例 上面程序的输出如下- 输出结果 现在让我们了解上面的程序。 使用方法java.io.File.getAbs
本文向大家介绍获取Java中文件的绝对路径,包括了获取Java中文件的绝对路径的使用技巧和注意事项,需要的朋友参考一下 方法java.io.File.getAbsolutePath()用于获取字符串形式的文件的绝对路径。此方法不需要任何参数。 演示此的程序如下所示- 示例 上面程序的输出如下- 输出结果 现在让我们了解上面的程序。 使用方法java.io.File.getAbsolutePath(
问题内容: 在这个话题上有很多困惑。已经提出了几个问题。事情似乎仍然不清楚。ClassLoader,绝对文件路径等 假设我有一个项目目录结构, 我在“ lib / txt”目录中有一个资源说“ txtfile.txt”。我想以系统独立的方式访问它。我需要项目的绝对路径。所以我可以将路径编码为abspath +“ / lib / Dictionary / txtfile.txt” 假设我这样做 我得
本文向大家介绍JAVA获取文件绝对路径的方法,包括了JAVA获取文件绝对路径的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JAVA获取文件绝对路径的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Java程序设计有所帮助。
假设标准maven设置。 在Java中,我如何获得文件的绝对路径?