Java Tutorial/File/ZipFile
Содержание
- 1 Create a simple ZIP File: not retain any directory path information about the files.
- 2 Create a zip file
- 3 Create checksum for a zip file
- 4 Extract file/files from a zip file
- 5 Get comment for a zipped file
- 6 Get CRC code for a zipped file
- 7 Get file time for all zipped files
- 8 Get uncompressed and compressed Size
- 9 Making a zip file of directory including its subdirectories recursively
- 10 Read a zip file checksum value
- 11 Read zip file
- 12 Retrieve a compressed file from a ZIP file
- 13 Use ZipFile to list all entries
- 14 Write Zip file
Create a simple ZIP File: not retain any directory path information about the files.
<source lang="java">
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class Main {
static String rmPath(String fName) { int pos = fName.lastIndexOf(File.separatorChar); if (pos > -1) fName = fName.substring(pos + 1); return fName; } public static void main(String args[]) throws Exception { ZipOutputStream fout = new ZipOutputStream(new BufferedOutputStream( new FileOutputStream(args[0]))); for (int n = 1; n < args.length; n++) { BufferedInputStream fin = new BufferedInputStream(new FileInputStream( args[n])); ZipEntry ze = new ZipEntry(rmPath(args[n])); fout.putNextEntry(ze); int i; do { i = fin.read(); if (i != -1) fout.write(i); } while (i != -1); fout.closeEntry(); fin.close(); System.out.println("Compressing " + args[n]); System.out.println(" Original Size: " + ze.getSize() + " Compressed Size: " + ze.getCompressedSize() + "\n"); } fout.close(); }
}</source>
Create a zip file
<source lang="java">
import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class Main {
public static void main(String[] args) throws Exception { FileInputStream inStream = new FileInputStream("test.txt"); ZipOutputStream outStream = new ZipOutputStream(new FileOutputStream("compressed.zip")); outStream.putNextEntry(new ZipEntry("test.txt")); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = inStream.read(buffer)) > 0) { outStream.write(buffer, 0, bytesRead); } outStream.closeEntry(); outStream.close(); inStream.close(); }
}</source>
Create checksum for a zip file
<source lang="java">
import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.Adler32; import java.util.zip.CheckedOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class Main {
public static void main(String[] args) throws Exception { CheckedOutputStream checksum = new CheckedOutputStream( new FileOutputStream("data.zip"), new Adler32()); ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(checksum)); int size = 0; byte[] buffer = new byte[1024]; File dir = new File("."); String[] files = dir.list(); for (int i = 0; i < files.length; i++) { System.out.println("Compressing: " + files[i]); FileInputStream fis = new FileInputStream(files[i]); ZipEntry zipEntry = new ZipEntry(files[i]); zos.putNextEntry(zipEntry); while ((size = fis.read(buffer, 0, buffer.length)) > 0) { zos.write(buffer, 0, size); } zos.closeEntry(); fis.close(); } zos.close(); System.out.println("Checksum : " + checksum.getChecksum().getValue()); }
}</source>
Extract file/files from a zip file
<source lang="java">
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class Main {
public static void main(String[] args) throws Exception{ String destinationname = "d:\\"; byte[] buf = new byte[1024]; ZipInputStream zipinputstream = null; ZipEntry zipentry; zipinputstream = new ZipInputStream(new FileInputStream("fileName")); zipentry = zipinputstream.getNextEntry(); while (zipentry != null) { String entryName = zipentry.getName(); FileOutputStream fileoutputstream; File newFile = new File(entryName); String directory = newFile.getParent(); if (directory == null) { if (newFile.isDirectory()) break; } fileoutputstream = new FileOutputStream(destinationname + entryName); int n; while ((n = zipinputstream.read(buf, 0, 1024)) > -1){ fileoutputstream.write(buf, 0, n); } fileoutputstream.close(); zipinputstream.closeEntry(); zipentry = zipinputstream.getNextEntry(); } zipinputstream.close(); }
}</source>
Get comment for a zipped file
<source lang="java">
import java.io.IOException; import java.util.Date; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class MainClass {
public static void main(String[] args) { try { ZipFile zf = new ZipFile("your.zip"); Enumeration e = zf.entries(); while (e.hasMoreElements()) { ZipEntry ze = (ZipEntry) e.nextElement(); String name = ze.getName(); long crc = ze.getCrc(); System.out.println("Its CRC is " + crc); String comment = ze.getComment(); if (comment != null && !comment.equals("")) { System.out.println(comment); } if (ze.isDirectory()) { System.out.println(name + " is a directory"); } } } catch (IOException ex) { System.err.println(ex); } }
}</source>
Get CRC code for a zipped file
<source lang="java">
import java.io.IOException; import java.util.Date; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class MainClass {
public static void main(String[] args) { try { ZipFile zf = new ZipFile("your.zip"); Enumeration e = zf.entries(); while (e.hasMoreElements()) { ZipEntry ze = (ZipEntry) e.nextElement(); String name = ze.getName(); long crc = ze.getCrc(); System.out.println("Its CRC is " + crc); String comment = ze.getComment(); if (comment != null && !comment.equals("")) { System.out.println(comment); } if (ze.isDirectory()) { System.out.println(name + " is a directory"); } } } catch (IOException ex) { System.err.println(ex); } }
}</source>
Get file time for all zipped files
<source lang="java">
import java.io.IOException; import java.util.Date; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class MainClass {
public static void main(String[] args) { try { ZipFile zf = new ZipFile("your.zip"); Enumeration e = zf.entries(); while (e.hasMoreElements()) { ZipEntry ze = (ZipEntry) e.nextElement(); String name = ze.getName(); Date lastModified = new Date(ze.getTime()); long uncompressedSize = ze.getSize(); long compressedSize = ze.getCompressedSize(); System.out.println(name); System.out.println(lastModified); System.out.println(uncompressedSize); System.out.println(compressedSize); } } catch (IOException ex) { System.err.println(ex); } }
}</source>
Get uncompressed and compressed Size
<source lang="java">
import java.io.IOException; import java.util.Date; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class MainClass {
public static void main(String[] args) { try { ZipFile zf = new ZipFile("your.zip"); Enumeration e = zf.entries(); while (e.hasMoreElements()) { ZipEntry ze = (ZipEntry) e.nextElement(); String name = ze.getName(); Date lastModified = new Date(ze.getTime()); long uncompressedSize = ze.getSize(); long compressedSize = ze.getCompressedSize(); System.out.println(name); System.out.println(lastModified); System.out.println(uncompressedSize); System.out.println(compressedSize); } } catch (IOException ex) { System.err.println(ex); } }
}</source>
Making a zip file of directory including its subdirectories recursively
<source lang="java">
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class Main {
private static void zipDir(String zipFileName, String dir) throws Exception { File dirObj = new File(dir); ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName)); System.out.println("Creating : " + zipFileName); addDir(dirObj, out); out.close(); } static void addDir(File dirObj, ZipOutputStream out) throws IOException { File[] files = dirObj.listFiles(); byte[] tmpBuf = new byte[1024]; for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { addDir(files[i], out); continue; } FileInputStream in = new FileInputStream(files[i].getAbsolutePath()); System.out.println(" Adding: " + files[i].getAbsolutePath()); out.putNextEntry(new ZipEntry(files[i].getAbsolutePath())); int len; while ((len = in.read(tmpBuf)) > 0) { out.write(tmpBuf, 0, len); } out.closeEntry(); in.close(); } } public static void main(String[] args) throws Exception { zipDir(args[0], args[1]); }
}</source>
Read a zip file checksum value
<source lang="java">
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.Adler32; import java.util.zip.CheckedInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class Main {
public static void main(String[] args) throws Exception { String zipname = "d.zip"; CheckedInputStream checksum = new CheckedInputStream( new FileInputStream(zipname), new Adler32()); ZipInputStream zis = new ZipInputStream(new BufferedInputStream(checksum)); ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { System.out.println("Unzipping: " + entry.getName()); int size; byte[] buffer = new byte[2048]; BufferedOutputStream bos = new BufferedOutputStream( new FileOutputStream(entry.getName()), buffer.length); while ((size = zis.read(buffer, 0, buffer.length)) != -1) { bos.write(buffer, 0, size); } bos.flush(); bos.close(); } zis.close(); System.out.println("Checksum = " + checksum.getChecksum().getValue()); }
}</source>
Read zip file
<source lang="java">
import java.io.FileInputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class Main {
public static void main(String[] args) throws Exception { FileInputStream fis = new FileInputStream("C:/MyZip.zip"); ZipInputStream zis = new ZipInputStream(fis); ZipEntry ze; while ((ze = zis.getNextEntry()) != null) { System.out.println(ze.getName()); zis.closeEntry(); } zis.close(); }
}</source>
Retrieve a compressed file from a ZIP file
<source lang="java">
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.zip.ZipInputStream; public class Main {
public static void main(String[] argv) throws Exception { ZipInputStream in = new ZipInputStream(new FileInputStream("source.zip")); OutputStream out = new FileOutputStream("target"); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } out.close(); in.close(); }
}</source>
Use ZipFile to list all entries
<source lang="java">
import java.io.IOException; import java.util.Enumeration; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; public class MainClass {
public static void main(String[] args) throws IOException { ZipFile zf = new ZipFile("test.zip"); Enumeration e = zf.entries(); while (e.hasMoreElements()) { ZipEntry ze2 = (ZipEntry) e.nextElement(); System.out.println("File: " + ze2); } }
}</source>
Write Zip file
<source lang="java">
import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class Main {
public static void main(String[] args) throws Exception { FileOutputStream fos = new FileOutputStream("C:/MyZip.zip"); ZipOutputStream zos = new ZipOutputStream(fos); ZipEntry ze = new ZipEntry("C:/file1.txt"); zos.putNextEntry(ze); zos.closeEntry(); ze = new ZipEntry("C:/file2.txt"); zos.putNextEntry(ze); zos.closeEntry(); zos.close(); }
}</source>