我想将当前目录下的某个(些)文件添加到zip包中,现在如果这个(些)文件名含有中文字符,当用winzip或winrar 解压时,看到的文件名原来是中文的地方对应的是乱码(此处不讨论文件中的内容),
当前包下有 "java编程思想.txt"这个文件,源码如下,压缩后再解压,文件名为"java缂栫▼鎬濇兂.txt".  请问这个该怎么解决啊?import java.io.*;
import java.util.zip.*;  public class compress{
       public static void main(String[] args){
          try{
              BufferedReader in=new BufferedReader(new InputStreamReader(
                                new FileInputStream("java编程思想.txt"),"ISO8859_1"));
              FileOutputStream f=new FileOutputStream("dest.zip");
              CheckedOutputStream ch=new CheckedOutputStream(f,new CRC32());
              ZipOutputStream out=new ZipOutputStream(
                                  new BufferedOutputStream(ch));
       
             int c;
             out.putNextEntry(new ZipEntry("java编程思想.txt"));
             while((c=in.read())!=-1)
                 out.write(c);
               in.close();
               out.close();
             }
          catch(Exception e){
              e.printStackTrace();
             }
     }
  } 

解决方案 »

  1.   

    用apache的包吧!
    代码如下:import org.apache.tools.zip.ZipEntry;
    import org.apache.tools.zip.ZipFile;
    import org.apache.tools.zip.ZipOutputStream;    public boolean zip(ZipOutputStream zos ,File f,String szBaseDir) throws IOException {
            File[] fList;
            int n=0;
            byte[] byBuf=new byte[m_nBufSize];
            int nRead=0;
            ZipEntry ze;
            BufferedInputStream bis;
            
            if(!f.exists())
                return false;
            if(f==null)
                f=new File(".");
            //若是目录,递归
            if(f.isDirectory()){
                fList=f.listFiles();
                //遍历该目录下的各个文件
                for(n=0;n<fList.length;++n){
                    if (zip(zos, fList[n], szBaseDir + f.getName() + File.separator) == false)
                        return false;
                }
                
            //若是文件,写入压缩流
            }else{
                ze=new ZipEntry(szBaseDir+f.getName());
                zos.putNextEntry(ze);
                bis=new BufferedInputStream(new FileInputStream(f));
                while ((nRead = bis.read(byBuf)) >= 0) {
                    zos.write(byBuf, 0, nRead);
                }
                bis.close();
                zos.closeEntry();
            }
            return true;
        }
      

  2.   

    谢谢,但是org.apache.tools.zip 包下有哪些类,类中又有些什么方法,怎样才能知道?
    而且,我试过上面的方法,压缩得很慢。怎么办?