我想在Netbeans的项目中包含一个文件,我正在使用Java语言为PC开发应用程序.我几乎在网上搜索,但什么也没找到.当我编译应用程序时,如果进入存在/ dist的路径,则文件exe不在此处.
非常感谢.
String exec [] = {getClass().getClassLoader().getResource("inc_volume.exe").getPath() };
System.out.println(exec[0]);
Runtime.getRuntime().exec(exec);
于20/08/2014更新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();
}
此处图片:
解决方法:
要将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();
}
}
}
}