package com.tal;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;public class Test { public static void main(String[] args) throws FileNotFoundException,
IOException, ClassNotFoundException {
Person p = new Person("张三", 25);
FileOutputStream fileOutStream = new FileOutputStream("zhangsan");
ObjectOutputStream objectOutStream = new ObjectOutputStream(
fileOutStream);
objectOutStream.writeObject(p);
objectOutStream.close();
p = null; FileInputStream fileInStream = new FileInputStream("zhangsan"); String zipFileName = "c:/test.zip";
ZipOutputStream zipOutput = new ZipOutputStream(new FileOutputStream(
zipFileName)); zipOutput.flush();
//将对象变成文件然后压缩成zip
addFile(zipOutput, fileInStream);
//将zip解压还原出对象
unzip(new File(zipFileName)); System.out.println("end"); } /**
 * 释放文件
 * 
 * @param path
 * @param zipIns
 * @param zipEntry
 * @throws IOException
 * @throws ClassNotFoundException 
 */
private static void extractFile( ZipInputStream zipIns,
ZipEntry zipEntry) throws IOException, ClassNotFoundException {
FileOutputStream ous = new FileOutputStream("tmp");
byte[] tmp = new byte[1024];
int len = 0;
while ((len = zipIns.read(tmp)) != -1) 
ous.write(tmp, 0, len);
ous.close();
zipIns.closeEntry();
    FileInputStream fileInStream = new FileInputStream("tmp");
        ObjectInputStream objectInStream = new ObjectInputStream(fileInStream);
        Person    p = (Person) objectInStream.readObject();
 
        System.out.println(p.getName());
        System.out.println(p.getAge());
} /**
 * 解压缩
 * 
 * @param input
 *            压缩文件
 * @param output
 *            解压位置
 * @throws IOException
 * @throws ClassNotFoundException 
 */
public static void unzip(File input) throws IOException, ClassNotFoundException {

ZipInputStream zipIns = new ZipInputStream(new FileInputStream(input));
ZipEntry zipEntry = zipIns.getNextEntry(); while (zipEntry != null) {
extractFile(zipIns, zipEntry); zipEntry = zipIns.getNextEntry();
}
zipIns.close();
} /**
 * 压缩文件
 * 
 * @param zipOutput
 * @param path
 * @param file
 * @throws IOException
 */
private static void addFile(ZipOutputStream zipOutput, FileInputStream ins)
throws IOException { byte[] tmp = new byte[1024];
int len = 0; while ((len = ins.read(tmp)) != -1) {
zipOutput.write(tmp, 0, len);
}
ins.close(); zipOutput.closeEntry();
}}class Person implements Serializable { private String name;
private int age; public Person(String name, int age) {
this.name = name;
this.age = age;
} public int getAge() {
return age;
} public String getName() {
return name;
}
}

解决方案 »

  1.   


    package   com.tal; import   java.io.File; 
    import   java.io.FileInputStream; 
    import   java.io.FileNotFoundException; 
    import   java.io.FileOutputStream; 
    import   java.io.IOException; 
    import   java.io.ObjectInputStream; 
    import   java.io.ObjectOutputStream; 
    import   java.io.Serializable; 
    import   java.util.zip.ZipEntry; 
    import   java.util.zip.ZipInputStream; 
    import   java.util.zip.ZipOutputStream; public   class   Test   { public   static   void   main(String[]   args)   throws   FileNotFoundException, 
    IOException,   ClassNotFoundException   { 
    Person   p   =   new   Person( "张三 ",   25); 
    FileOutputStream   fileOutStream   =   new   FileOutputStream( "zhangsan "); 
    ObjectOutputStream   objectOutStream   =   new   ObjectOutputStream( 
    fileOutStream); 
    objectOutStream.writeObject(p); 
    objectOutStream.close(); 
    p   =   null; FileInputStream   fileInStream   =   new   FileInputStream( "zhangsan "); String   zipFileName   =   "c:/test.zip "; 
    ZipOutputStream   zipOutput   =   new   ZipOutputStream(new   FileOutputStream( 
    zipFileName)); zipOutput.flush(); 
    //将对象变成文件然后压缩成zip 
    addFile(zipOutput,   fileInStream); 
    //将zip解压还原出对象 
    unzip(new   File(zipFileName)); System.out.println( "end "); } /** 
      *   释放文件 
      *   
      *   @param   path 
      *   @param   zipIns 
      *   @param   zipEntry 
      *   @throws   IOException 
      *   @throws   ClassNotFoundException   
      */ 
    private   static   void   extractFile(   ZipInputStream   zipIns, 
    ZipEntry   zipEntry)   throws   IOException,   ClassNotFoundException   { 
    FileOutputStream   ous   =   new   FileOutputStream( "tmp "); 
    byte[]   tmp   =   new   byte[1024]; 
    int   len   =   0; 
    while   ((len   =   zipIns.read(tmp))   !=   -1)   
    ous.write(tmp,   0,   len); 
    ous.close(); 
    zipIns.closeEntry(); 
            FileInputStream   fileInStream   =   new   FileInputStream( "tmp "); 
                    ObjectInputStream   objectInStream   =   new   ObjectInputStream(fileInStream); 
                    Person         p   =   (Person)   objectInStream.readObject();                 System.out.println(p.getName()); 
                    System.out.println(p.getAge());[/color] } /** 
      *   解压缩 
      *   
      *   @param   input 
      *                         压缩文件 
      *   @param   output 
      *                         解压位置 
      *   @throws   IOException 
      *   @throws   ClassNotFoundException   
      */ 
    public   static   void   unzip(File   input)   throws   IOException,   ClassNotFoundException   { ZipInputStream   zipIns   =   new   ZipInputStream(new   FileInputStream(input)); 
    ZipEntry   zipEntry   =   zipIns.getNextEntry(); while   (zipEntry   !=   null)   { 
    extractFile(zipIns,   zipEntry); zipEntry   =   zipIns.getNextEntry(); 

    zipIns.close(); 
    } /** 
      *   压缩文件 
      *   
      *   @param   zipOutput 
      *   @param   path 
      *   @param   file 
      *   @throws   IOException 
      */ 
    private   static   void   addFile(ZipOutputStream   zipOutput,   FileInputStream   ins) 
    throws   IOException   { byte[]   tmp   =   new   byte[1024]; 
    int   len   =   0; while   ((len   =   ins.read(tmp))   !=   -1)   { 
    zipOutput.write(tmp,   0,   len); 

    ins.close(); zipOutput.closeEntry(); 
    } } class   Person   implements   Serializable   { private   String   name; 
    private   int   age; public   Person(String   name,   int   age)   { 
    this.name   =   name; 
    this.age   =   age; 
    } public   int   getAge()   { 
    return   age; 
    } public   String   getName()   { 
    return   name; 

      

  2.   

        // 将对象变成文件然后压缩成zip
        zipOutput.putNextEntry(new ZipEntry("zhangsan"));   // 增加这一句
        addFile(zipOutput, fileInStream);你的代码写少了哦!
      

  3.   

    你还少写了一个语句
        // 将对象变成文件然后压缩成zip
        zipOutput.putNextEntry(new ZipEntry("zhangsan"));  
        addFile(zipOutput, fileInStream);
        zipOutput.close(); // 这里还得关闭