Java examples for File Path IO:File delete
Extracts the file archive to the target dir target Dir and deletes the files extracted upon jvm exit if the flag deleteOnExit is true.
//Licensed under the Apache License, Version 2.0 (the "License"); //package com.java2s; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; public class Main { public static void main(String[] argv) throws Exception { File archive = new File("Main.java"); File targetDir = new File("Main.java"); System.out.println(extract(archive, targetDir)); }/*from ww w.j a va2s . c o m*/ /** * The suffixes of the files to support. */ public static final String[] SUPPORTED_FILES = new String[] { ".zip", ".jar", ".war" }; public static boolean extract(File archive, File targetDir) throws IOException { return extract(archive.toURI().toURL(), targetDir, true); } public static boolean extract(File archive, File targetDir, boolean deleteOnExit) throws IOException { return extract(archive.toURI().toURL(), targetDir, deleteOnExit); } public static boolean extract(URL archive, File targetDir) throws IOException { return extract(archive, targetDir, true); } /** * Extracts the file {@code archive} to the target dir {@code targetDir} and deletes the * files extracted upon jvm exit if the flag {@code deleteOnExit} is true. */ public static boolean extract(URL archive, File targetDir, boolean deleteOnExit) throws IOException { String archiveStr = archive.toString(); String jarEntry = null; int idx = archiveStr.indexOf("!/"); if (idx != -1) { if (!archiveStr.startsWith("jar:") && archiveStr.length() == idx + 2) return false; archive = new URL(archiveStr.substring(4, idx)); jarEntry = archiveStr.substring(idx + 2); } else if (!isSupported(archiveStr)) return false; JarInputStream jis = new JarInputStream(archive.openConnection() .getInputStream()); if (!targetDir.exists()) targetDir.mkdirs(); JarEntry entry = null; while ((entry = jis.getNextJarEntry()) != null) { String entryName = entry.getName(); File entryFile = new File(targetDir, entryName); if (!entry.isDirectory()) { if (jarEntry == null || entryName.startsWith(jarEntry)) { if (!entryFile.exists() || entryFile.lastModified() != entry.getTime()) extractEntry(entryFile, jis, entry, deleteOnExit); } } } try { jis.close(); } catch (Exception e) { } return true; } /** * Returns true if the given {@code resource} is either a zip, jar or war file. */ public static boolean isSupported(String resource) { int idx = resource.lastIndexOf('.'); if (resource.length() == idx + 4) { for (int i = 0; i < SUPPORTED_FILES.length; i++) { if (resource.endsWith(SUPPORTED_FILES[i])) return true; } } return false; } private static void extractEntry(File entryFile, JarInputStream jis, JarEntry entry, boolean deleteOnExit) throws IOException { File parent = new File(entryFile.getParent()); if (!parent.exists()) parent.mkdirs(); //ResourceUtil.copy(jis, new FileOutputStream(entryFile)); entryFile.setLastModified(entry.getTime()); if (deleteOnExit) { parent.deleteOnExit(); entryFile.deleteOnExit(); } } }