Java Tutorial/File/ZipFile

Материал из Java эксперт
Перейти к: навигация, поиск

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>