我想在Netbeans的项目中加入一个文件,我正在开发一个使用Java语言的PC应用程序。我几乎在网上搜索,但我什么都没发现。当我编译应用程序时,如果我进入路径有/ dist文件exe不在这里。 非常感谢你。
String exec [] = {getClass().getClassLoader().getResource("inc_volume.exe").getPath() };
System.out.println(exec[0]);
Runtime.getRuntime().exec(exec);
2014年8月20日更新15.29
我发现这个来源是从jar中提取的,但我不知道如何使用:
java.util.jar.JarFile jar = new java.util.jar.JarFile(jarFile);
java.util.Enumeration enumEntries = jar.entries();
while (enumEntries.hasMoreElements()) {
java.util.jar.JarEntry file = (java.util.jar.JarEntry) enumEntries.nextElement();
java.io.File f = new java.io.File(destDir + java.io.File.separator + file.getName());
if (file.isDirectory()) { // if its a directory, create it
f.mkdir();
continue;
}
java.io.InputStream is = jar.getInputStream(file); // get the input stream
java.io.FileOutputStream fos = new java.io.FileOutputStream(f);
while (is.available() > 0) { // write contents of 'is' to 'fos'
fos.write(is.read());
}
fos.close();
is.close();
}
这里图片:
答案 0 :(得分:4)
要将exe文件包含到项目中,请将此exe文件通过文件系统复制到Netbeans项目的src
文件夹中。
当您构建项目时,此exe文件将打包到项目jar文件中。
在运行时运行此exe,您将需要to extract this exe file from your jar file。
当提取此exe文件时,您可以执行它。
要从您的java代码启动外部应用程序,我建议使用Apache Commons Exec:http://commons.apache.org/proper/commons-exec/
<强>更新强>
下面是示例类,演示如何从当前运行的jar文件中提取所有exe文件。我使用这些SO帖子来创建此类:the first和the second个。
import java.io.File;
import java.io.IOException;
/**
*
*/
public class TestClass {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
extractExeFiles("C://Temp");
}
/**
* Gets running jar file path.
* @return running jar file path.
*/
private static File getCurrentJarFilePath() {
return new File(TestClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
}
/**
* Extracts all exe files to the destination directory.
* @param destDir destination directory.
* @throws IOException if there's an i/o problem.
*/
private static void extractExeFiles(String destDir) throws IOException {
java.util.jar.JarFile jar = new java.util.jar.JarFile(getCurrentJarFilePath());
java.util.Enumeration enumEntries = jar.entries();
String entryName;
while (enumEntries.hasMoreElements()) {
java.util.jar.JarEntry file = (java.util.jar.JarEntry) enumEntries.nextElement();
entryName = file.getName();
if ( (entryName != null) && (entryName.endsWith(".exe"))) {
java.io.File f = new java.io.File(destDir + java.io.File.separator + entryName);
if (file.isDirectory()) { // if its a directory, create it
f.mkdir();
continue;
}
java.io.InputStream is = jar.getInputStream(file); // get the input stream
java.io.FileOutputStream fos = new java.io.FileOutputStream(f);
while (is.available() > 0) { // write contents of 'is' to 'fos'
fos.write(is.read());
}
fos.close();
is.close();
}
}
}
}