Sometimes, you need to do the file compression, decompression.
Java itself provides a compressed, uncompressed native class library. But with open source code, I generally choose to use the Open source class library.
Here's a sticker, I use ant-1.6.5 zip compression, unzip the code bar.
Ziputil.java
Import Java.io.file;import java.io.fileinputstream;import java.io.fileoutputstream;import java.io.IOException; Import Java.io.inputstream;import java.util.arraylist;import Java.util.date;import Java.util.list;import Java.util.zip.crc32;import Org.apache.tools.ant.project;import Org.apache.tools.ant.taskdefs.expand;import Org.apache.tools.ant.taskdefs.zip;import Org.apache.tools.ant.types.fileset;import Org.apache.tools.ant.types.zipfileset;import Org.apache.tools.zip.zipentry;import Org.apache.tools.zip.ZipFile; Import org.apache.tools.zip.zipoutputstream;/** * <p> * Title: compression, decompression, auxiliary class * </p> * * @author mahh */public cl Ziputil {//==========================================================================//Compressed file method 1//============ ==============================================================/** * @Description: Compress a folder or a file * @param Sourcefilepath * source folder or source file * @param destzip * Compressed zip file * @author mahh * @since: 2015-2-28 09:36:32 */public Static VoiD zip1 (String Sourcefilepath, String destzip) {fileutil.createparentfile (destzip);//The destination file does not exist create a project project = new P Roject (); Zip zip = new zip (), Zip.setproject (Project), Zip.setdestfile (New File (Destzip));//Set the generated destination zip file object Fileset Fileset = New Fileset (); Fileset.setproject (project); File SourceFile1 = new file (Sourcefilepath), if (Sourcefile1.isdirectory ()) {Fileset.setdir (SOURCEFILE1);// Sets the source file object that will be compressed//Fileset.setincludes ("**/*.java"); Which files or folders are included, only all Java files//fileset.setexcludes ("**/*.java") in the directory are compressed; Exclude which files or folders, compress all files, exclude Java files} else {fileset.setfile (sourceFile1);//Set the source file object that will be compressed}//add a fileset. Multiple Filesetzip.addfileset (Fileset) can be added in Zip, Zip.execute ();} /** * @Description: Unzip * @param sourcezipfilepath * Source Compressed file Zip * @param destzipdir * Unzip to folder path * @retu RN * @author mahh * @since: 2015-2-28 pm 04:57:28 */public static void UnZip1 (String sourcezipfilepath, String destzipdir) { Fileutil.createdir (Destzipdir); Project PROEJCT = new Project (); Expand Expand =New Expand (); Expand.setproject (PROEJCT); Expand.setsrc (new File (Sourcezipfilepath)); Expand.setoverwrite (false);// Whether overwrite//if not written, it is very likely that the file name of the extracted file (including Chinese) garbled expand.setencoding (System.getproperty ("sun.jnu.encoding")); File File = new file (destzipdir); expand.setdest (file); Expand.execute ();} ==========================================================================//Compressed file Method 2//======================== ==================================================/** * @Description: Compress a set of files into a compressed file * @param list * A set of compressed source files , file cannot be directory * @param destzipfilepath * Generate ZIP file absolute path * @param inzipbasepath * Compressed file within Zip, relative path (e.g. a/b/c), default in The zip root directory. * @return * @author mahh * @since: 2015-2-28 pm 05:09:33 */public static File zip2 (list<file> List, String destzipfile Path,string Inzipbasepath) {if (Inzipbasepath = = null) {Inzipbasepath = "";} Inzipbasepath = Buildfilepath (Inzipbasepath); File ZipFile = Fileutil.createnewfile (Destzipfilepath);//The destination file does not exist to create a zipoutputstream out = null;try {out =New Zipoutputstream (New FileOutputStream (ZipFile)); for (int i = 0; i < list.size (); i++) {File File = List.get (i); if (! File.exists ()) {continue;} if (File.isdirectory ()) {Dozipfolder (Inzipbasepath, out, file), or else {dozipfile (Inzipbasepath, out, file);}} return zipfile;} catch (IOException e) {throw new RuntimeException (e);} finally {Closezipoutstream (out);}} /** * @Description: Compresses only one folder itself (does not contain the contents of the folder) */private static void Dozipfolder (String inzipbasepath, zipoutputstream out, File file) throws IOException {zipentry ze = new ZipEntry (Inzipbasepath + fileutil.file_separator+ file.getname () + FileUt Il. File_separator); Ze.settime (new Date (). GetTime ()); ze.setsize (0); Ze.setmethod (zipentry.stored); ZE.SETCRC (New CRC32 (). GetValue ()); Ze.setunixmode (Zipfileset.default_dir_mode); Out.putnextentry (Ze);} /** * @Description: Compress a file */private static void Dozipfile (String inzipbasepath, zipoutputstream out,file file) throws IOE xception {FileInputStream in = new FileInputStream (file); Out.putnextentry (newZipEntry (Inzipbasepath + fileutil.file_separator+ File.getname ())); byte[] buf = new Byte[1024];int len;while (len = IN.R EAD (BUF)) > 0) {out.write (buf, 0, Len);} if (in = null) {In.close ();}} private static void Closezipoutstream (Zipoutputstream out) {if (out = = null) {return;} try {out.closeentry ();} catch (IOException e) {throw new RuntimeException (e);} try {out.close ();} catch (IOException e) {throw new RuntimeException (e);}} /** * @Description: Returns the string to remove the end of the \ or/* @param path * @return * @author mahh * @since: 2015-2-28 morning 10:36:31 */private static St Ring Buildfilepath (Final String path) {if (path = = null) {return "";} String retstr = Path;while (Fileutil.isfolderpath (RETSTR)) {if (Retstr.length () < 1) {break;} Retstr = retstr.substring (0, Retstr.length ()-1);} return RETSTR;} ==========================================================================//Extract File Method 2//======================= ===================================================/** * @Description: Unzip * @param sourcezipfilepath* Source Compressed file Zip * @param destzipdir * Unzip to Folder path * @return * @author mahh * @since: 2015-2-28 03:47:26 * * @SuppressWarnings ("unchecked") public static list<file> unZip2 (String sourcezipfilepath, String destzipdir) { list<file> res = new arraylist<file> (); ZipFile ZipFile = null;try {zipfile = new ZipFile (sourcezipfilepath);java.util.enumeration<zipentry> ele = ZipFile . GetEntries (); while (Ele.hasmoreelements ()) {ZipEntry ZipEntry = (zipentry) ele.nextelement (); File f = null;if (Fileutil.isfolderpath (Zipentry.getname ())) {//unzip a folder F = Dounzipfolder (Destzipdir, ZipFile, ZipEntry );} else {//unzip a file F = dounzipfile (Destzipdir, ZipFile, zipentry);} Res.add (f);}} catch (Exception e) {throw new RuntimeException ("{{not available zip file!}}");} finally {try {if (ZipFile! = null) {Zipfile.close ();} } catch (IOException e) {e.printstacktrace ();}} return res;} /** * @Description: Unzip a folder itself (does not contain the contents of the folder) */private static File Dounzipfolder (String destzipdir, ZipFile Zipfile,ziPentry zipentry) throws IOException {File f = fileutil.createnewfile (Destzipdir + fileutil.file_separator+ Zipentry.getname ()); return F;} /** * @Description: Unzip a file */private static file Dounzipfile (String destzipdir, ZipFile zipfile,zipentry zipentry) throws IOException {File F = null;inputstream in = null; FileOutputStream out = null;try {f = fileutil.createnewfile (Destzipdir + fileutil.file_separator+ zipEntry.getName ()); in = Zipfile.getinputstream (zipentry), out = new FileOutputStream (f), byte[] by = new Byte[100000];int C;while (c = in.read (by)) ! =-1) {Out.write (by, 0, c);} Out.flush ();} catch (Exception e) {e.printstacktrace (); throw new RuntimeException (e);} finally {if (in = null) {in.close (); Close the input Stream object}if (out! = null) {out.close ();//////////////////////after decompression
Fileutil.java
Import Java.io.file;import java.io.ioexception;/** * <p> * Title: Create file, Folder Tool class * </p> * * @author mahh * */PUBL IC class Fileutil {/** * OS path separator */public static final String file_separator = System.getproperty ("File.separator");/** * @Description: Create a file (automatically create a folder where the path does not exist). * @param path * file paths * @return * @author mahh * @since: 2015-2-28 pm 02:23:29 */public static file CreateNewFile ( String path) {File File = new file (path);//If you end with a directory delimiter, then this path is a folder if (Isfolderpath (path)) {if (!file.exists ()) {file.mk Dirs ();} return file;} if (file.exists ()) {return file;} String Absolutepath = File.getabsolutepath ();//create file upper-level directory Createdir (absolutepath.substring (0, Absolutepath.lastindexof (File_separator)); try {//Create file File.createnewfile ();} catch (IOException e) { E.printstacktrace (); throw new RuntimeException ();} return file;} public static void Createparentfile (String path) {File File = new file (path); String Absolutepath = File.getabsolutepath ();//create File upper directory Createdir (absolutepath.substring (0, Absolutepath.lastindexof (File_separator)));} /** * @Description: Create folder * @param dir * @author mahh * @since: 2015-2-28 pm 02:23:40 */public static void Createdir (String Dir) {File file = new file (dir); if (!file.exists ()) {file.mkdirs ();}} /** * @Description: Determine if a string is not a folder path * @param path * @return * @author mahh * @since: 2015-2-28 morning 11:58:35 */public static B Oolean Isfolderpath (String path) {if (path = = null) {return false;} if (Path.endswith (File_separator)) {return true;} if (Path.endswith ("/")) {return true;} return false;}}
JAVA, using ant-1.6.5, compressing and decompressing auxiliary class code