将文件exe包含到项目Netbeans Java中
我想在Netbeans中的项目中包含一个文件,我正在用Java语言为PC开发一个应用程序。我几乎在网上搜索过,但什么也没找到。当我编译应用程序时,如果我进入有/dist的路径,则文件exe不在这里。 非常感谢你将文件exe包含到项目Netbeans Java中,java,file,netbeans,resources,exe,Java,File,Netbeans,Resources,Exe,我想在Netbeans中的项目中包含一个文件,我正在用Java语言为PC开发一个应用程序。我几乎在网上搜索过,但什么也没找到。当我编译应用程序时,如果我进入有/dist的路径,则文件exe不在这里。 非常感谢你 String exec [] = {getClass().getClassLoader().getResource("inc_volume.exe").getPath() }; System.out.println(exec[0]);
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();
}
图片如下:
要将exe文件包含到项目中,请通过文件系统将此exe文件复制到Netbeans项目的
src
文件夹中
构建项目后,此exe文件将打包到项目jar文件中
要在运行时运行此exe,您需要
在提取此exe文件时,您可以执行它
要从java代码启动外部应用程序,我建议使用Apache Commons Exec:
更新 下面是一个示例类,演示如何从当前运行的jar文件中提取所有exe文件。我用这些帖子来制作这个类:和
Lorenzo,当您构建java项目时,结果是在
dist
文件夹中有一个jar文件。如果您在项目中包含了一个文件,它将被封装到这个jar文件中。如果您不熟悉java,我建议您先学习基础知识。否则你会遇到许多难以克服的问题。从这里开始:为什么要投反对票?羞耻。@RafaelOsipov如何将文件exe包含到项目中,这样当我编译文件并得到jar时,jar就都在一起了?@PeterHorvath我不知道,这个社区中有一个愚蠢的人为什么不通过部署该项目将项目和.exe文件一起包含到jar
文件中,然后尝试同样的方法!!!好的,我可以将jar文件添加到exe文件中,现在如何自动删除它们,或者使用命令Runtime.getRuntime()运行它们。Exec(“inc_volume.exe”);我不建议从jar文件中删除exe,因为它是打包的,并且是应用程序所必需的。如果在提取时将其删除,则如果删除此exe文件或将其传输到其他文件夹,则无法执行此jar文件。如果始终包含exe,则可以将其解压缩到临时文件夹,执行并删除此exe文件。关于启动文件,我更喜欢使用ApacheCommonsExec而不是调用Runtime.getRunime.Exec()
。如果您不想使用ApacheCommonsExec,请查看这篇文章:如果您坚持在运行时从jar中删除您的exe,请查看这篇文章:我不明白如何使用此源代码,您向我发送了链接Nothing这是我们已经解决的工作。非常感谢:)@Rafael Osipov
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();
}
}
}
}