Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件exe包含到项目Netbeans Java中_Java_File_Netbeans_Resources_Exe - Fatal编程技术网

将文件exe包含到项目Netbeans Java中

将文件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]);

我想在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();
}
图片如下:


要将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();                
            }
        }
    }
}