将文件exe包含在Project Netbeans Java中

时间:2014-08-20 11:21:48

标签: java file netbeans resources exe

我想在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();
}

这里图片:

enter image description here

1 个答案:

答案 0 :(得分:4)

要将exe文件包含到项目中,请将此exe文件通过文件系统复制到Netbeans项目的src文件夹中。

exe file into your project

当您构建项目时,此exe文件将打包到项目jar文件中。

exe file packaged into jar file

在运行时运行此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 firstthe 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();                
            }
        }
    }
}