CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2EE / EJB / JMS

zip解压,中文文件名问题

楼主coyj(我爱老婆)2002-11-18 12:47:32 在 Java / J2EE / EJB / JMS 提问

如题。 问题点数:100、回复次数:3Top

1 楼juson()回复于 2002-11-18 14:57:41 得分 0

把相关类反编译,再修改?  
  自己重写?  
  要么等着sun自己在下个版本做修改。Top

2 楼zhkn(小鱼儿)回复于 2002-11-27 15:26:50 得分 100

今天也遇到这个问题,好不容易解决了,不过还是不爽,因为修改了相关类,而不能自己另写类。方法如下:  
  1.将/jdk/jre/lib/rt.jar解包  
  反编译ZipInputStream.class  
  修改getUTF8String函数为:  
          private   static   String   getUTF8String(byte   b[],   int   off,   int   len)  
          {  
                  String   s   =   "";  
                  try  
                  {  
                          s   =   new   String(b,   off,   len,   "GBK");  
                  }  
                  catch(Exception   e)  
                  {  
                          System.out.println(e.toString());  
                  }  
                  return   s;  
          }  
  编译,打包。  
  2.自己写的解包的类:  
   
  import   java.io.*;    
  import   java.util.*;    
  import   java.util.zip.*;    
  import   sun.io.*;    
   
  public   class   UnZip    
  {    
  public   static   void   main(String   filename)    
  {    
  System.out.println(filename);  
  File   infile   =   new   File(filename);    
   
  try{    
  //检查是否是zip文件    
  ZipFile   zip   =   new   ZipFile(infile);    
  zip.close();    
   
  //建立与目标文件的输入连接    
  ZipInputStream   in   =   new   ZipInputStream(new   FileInputStream(infile));    
  ZipEntry   file   =   in.getNextEntry();    
   
  int   i   =infile.getAbsolutePath().lastIndexOf('.');    
  String   dirname   =   new   String();    
  if   (   i   !=   -1   )    
  dirname   =   infile.getAbsolutePath().substring(0,i);    
  else    
  dirname   =   infile.getAbsolutePath();    
  File   newdir   =   new   File(dirname);    
  newdir.mkdir();    
   
  byte[]   c   =   new   byte[1024];    
  int   len;    
  int   slen;    
   
  while   (file   !=   null){    
   
  i   =   file.getName().replace('/','\\').lastIndexOf('\\');    
  if   (   i   !=   -1   ){    
  File   dirs   =   new   File(dirname+File.separator+file.getName().replace('/','\\').substring(0,i));    
  dirs.mkdirs();    
  dirs   =   null;    
  }    
   
  System.out.print("extract   "+file.getName().replace('/','\\')+"   ........   ");    
   
  if   (file.isDirectory()){    
  File   dirs   =   new   File(file.getName().replace('/','\\'));    
  dirs.mkdir();    
  dirs   =   null;    
  }    
  else{  
  FileOutputStream   out   =   new   FileOutputStream(dirname+File.separator+file.getName().replace('/','\\'));    
  while((slen   =   in.read(c,0,c.length))   !=   -1)    
  out.write(c,0,slen);    
  out.close();    
  }    
  System.out.print("o.k.\n");    
  file   =   in.getNextEntry();    
  }    
  in.close();    
  }catch(ZipException   zipe){    
  System.out.println(infile.getName()   +   "不是一个zip文件!");    
  }catch(IOException   ioe){    
  System.out.println("读取"+filename+"时错误!");    
  }catch(Exception   i){    
  System.out.println("over");    
  }    
  }    
   
  }    
   
   
  希望能解决你的问题,大家探讨一下更好的解决办法。Top

3 楼wjmmml(笑着悲伤)回复于 2002-11-27 15:49:43 得分 0

其实就是中文问题,你对文件名重新编码就可以了,用如下的函数:  
   
  public   static   String   UnicodeToChinese(String   s){  
      try{  
            if(s==null||s.equals(""))   return   "";  
            String   newstring=null;  
            newstring=new   String(s.getBytes("ISO8859_1"),"gb2312");  
            return   newstring;  
          }  
      catch(UnsupportedEncodingException   e)  
      {  
      return   s;  
      }  
      }  
   
  public   static   String   ChineseToUnicode(String   s){  
      try{  
      if(s==null||s.equals(""))   return   "";  
      String   newstring=null;  
      newstring=new   String(s.getBytes("gb2312"),"ISO8859_1");  
        return   newstring;  
      }  
      catch(UnsupportedEncodingException   e)  
      {  
      return   s;  
    }  
      }Top

相关问题

  • zip解压缩中文文件名乱码问题
  • 求解,如何获得filelistbox中的选中文件的文件名以及主文件名??
  • 解压缩中文文件名乱码问题???急
  • 高分求解:中文文件名下载问题
  • 如何解决XP系统中IE不能打开长中文文件名?
  • Servlet自动文件下载中文文件名乱码问题,怎样解决
  • win2k + Tomcat5.0 + jsp 中文文件名下载出错,该怎样解决??
  • Parser无法接受中文文件名?
  • XALAN的中文文件名问题
  • frontpage不能连接中文文件名?

关键词

  • zip
  • 修改
  • null
  • newstring
  • infile
  • dirname
  • zipinputstream
  • getabsolutepath
  • 类
  • 问题

得分解答快速导航

  • 帖主:coyj
  • zhkn

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo