请问压缩文件名为中文,怎么进行处理后,在压缩包看的文件名不在是乱码?

解决方案 »

  1.   

    我就是想做一个简单的package,入口是一个文件夹名(baseDir)和一个zip文件名(out.zip),功能就是把baseDir下所有文件包括目录结构打成一个压缩包以指定名称(out.zip)输出。现在功能是具备了,不过就是碰到baseDir下有日文,中文的文件夹或者文件会出现乱码,头大
      

  2.   

    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.UnsupportedEncodingException;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;public class UnZip 
    {
        static final int BUFFER = 2048;     //设置缓冲流
        public void unZip(String path) 
        {
           File fileComptation = new File(path);       int i =fileComptation.getAbsolutePath().lastIndexOf('.');
           String dirname = new String();
      
           if ( i != -1 )
      dirname = fileComptation.getAbsolutePath().substring(0,i);
           else
      dirname = fileComptation.getAbsolutePath();
      
           File newdir = new File(dirname);
           newdir.mkdir();
           try 
           {   
      FileInputStream fis = new FileInputStream(path);   //获得输入流
      ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
      ZipEntry file = zis.getNextEntry();
      byte[] c = new byte[1024];
      int slen; 
      while (file != null)
      {
        i = make8859toGB(file.getName()).replace('/','\\').lastIndexOf('\\');
        if ( i != -1 )
                 {
                     File dirs = new File(dirname+File.separator+make8859toGB(file.getName()).replace('/','\\').substring(0,i));
            dirs.mkdirs();
            dirs = null;
        }
             
        System.out.print("Extract "+make8859toGB(file.getName()).replace('/','\\')+" ........  ");
        if (file.isDirectory())
        {
            File dirs = new File(make8859toGB(file.getName()).replace('/','\\'));
         dirs.mkdir();
         dirs = null;
        }
        else
        { 
            FileOutputStream out = new FileOutputStream(dirname + File.separator + make8859toGB(file.getName()).replace('/','\\'));
           while((slen = zis.read(c,0,c.length)) != -1)
           out.write(c,0,slen);
           out.close();
        }
        System.out.print("O.K.\n");
        file = zis.getNextEntry();
     }
            }
            catch (Exception e) 
            {
        e.printStackTrace();
            }
        }    public static void main(String[] args)
        {
            UnZip uz=new UnZip();
            uz.unZip("y:\\XXX.zip") ;//zip压缩文件路径
        }    public static String make8859toGB(String str)
       {
            try
            {
                 String str8859 = new String(str.getBytes("8859_1"),"GB2312");
                 return str8859;
             }catch(UnsupportedEncodingException ioe)
             {
                 return str;
             }
         }
    }
      

  3.   

    呵呵,这个问题似乎google也没能很好的解决(Gmail)