从执行jar中提取文件后,deleteOnExit无法正常工作

时间:2015-06-12 13:52:34

标签: java

在一个简单的java应用程序中,我有代码将文件从jar提取到Temp位置,我标记了在VM终止时提取文件以删除但是当jar的执行完成时,文件不会被删除

主类:

java.io.File parentFolder = new java.io.File(System.getProperty("java.io.tmpdir") + "MyApp");
            if (!parentFolder.exists()) {
                parentFolder.mkdir();
            }
            parentFolder.deleteOnExit();
            OutputStream out = new FileOutputStream(System.getProperty("java.io.tmpdir") + "MyApp" + File.separator + "MyApp.exe");
            FileInputStream fin = new FileInputStream(URLDecoder.decode(MainClass.class.getProtectionDomain().getCodeSource().getLocation().getPath(), "utf-8"));
            BufferedInputStream bin = new BufferedInputStream(fin);
            ZipInputStream zin = new ZipInputStream(bin);
            ZipEntry ze = null;
            while ((ze = zin.getNextEntry()) != null) {               
                if (ze.getName().contains("MyApp.exe")) {
                    java.io.File f = new java.io.File(System.getProperty("java.io.tmpdir") + "MyApp" + File.separator + ze.getName());
                    f.deleteOnExit();
                    byte[] buffer = new byte[8192];
                    int len;
                    while ((len = zin.read(buffer)) != -1) {
                        out.write(buffer, 0, len);
                    }
                    out.close();
                    break;
                }
            }
            zin.close();
            bin.close();
            fin.close();
            Process child = Runtime.getRuntime().exec(System.getProperty("java.io.tmpdir") + "MyApp" + File.separator + "MyApp.exe");
            child.waitFor();

这里有什么不对吗?

更新

现在正在工作:)

以前的MyApp.exe文件与MainClass.Class文件保持平行,即在src/MainApp/MyApp.exe我将.exe文件移动到src/MyApp.exe,因此在构建到jar .exe之后是根级别。因此,执行jar .exe后,将解压缩到临时文件夹,并在jar完成其工作时删除。

为什么它不能使用以前的位置(src/MainApp/MyApp.exe)?

0 个答案:

没有答案