在一个简单的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
)?