加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java解压多目录Zip文件(解决中文乱码问题)--转载

发布时间:2020-12-14 06:21:00 所属栏目:Java 来源:网络整理
导读:原文地址:http://zhangyongbo.iteye.com/blog/1749439 /spanspan style="color: #0000ff;"gt;private/span span style="color: #0000ff;"gt;static/span span style="color: #0000ff;"gt;final/span span style="color: #0000ff;"gt;int/span buffer = 2048

原文地址:http://zhangyongbo.iteye.com/blog/1749439

</span><span style="color: #0000ff;"&gt;private</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;final</span> <span style="color: #0000ff;"&gt;int</span> buffer = 2048<span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; main(String[] args) { unZip(</span>"E:javaAndroidaaa.zip"<span style="color: #000000;"&gt;); } </span><span style="color: #008000;"&gt;/**</span><span style="color: #008000;"&gt; * 解压Zip文件 * </span><span style="color: #808080;"&gt;@param</span><span style="color: #008000;"&gt; path 文件目录 </span><span style="color: #008000;"&gt;*/</span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;static</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; unZip(String path) { </span><span style="color: #0000ff;"&gt;int</span> count = -1<span style="color: #000000;"&gt;; String savepath </span>= ""<span style="color: #000000;"&gt;; File file </span>= <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;; InputStream is </span>= <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;; FileOutputStream fos </span>= <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;; BufferedOutputStream bos </span>= <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;; savepath </span>= path.substring(0,path.lastIndexOf(".")) + File.separator; <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;保存解压文件目录</span> <span style="color: #0000ff;"&gt;new</span> File(savepath).mkdir(); <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;创建保存目录</span> ZipFile zipFile = <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt; { zipFile </span>= <span style="color: #0000ff;"&gt;new</span> ZipFile(path,"gbk"); <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;解决中文乱码问题</span> Enumeration<?> entries =<span style="color: #000000;"&gt; zipFile.getEntries(); </span><span style="color: #0000ff;"&gt;while</span><span style="color: #000000;"&gt;(entries.hasMoreElements()) { </span><span style="color: #0000ff;"&gt;byte</span> buf[] = <span style="color: #0000ff;"&gt;new</span> <span style="color: #0000ff;"&gt;byte</span><span style="color: #000000;"&gt;[buffer]; ZipEntry entry </span>=<span style="color: #000000;"&gt; (ZipEntry)entries.nextElement(); String filename </span>=<span style="color: #000000;"&gt; entry.getName(); </span><span style="color: #0000ff;"&gt;boolean</span> ismkdir = <span style="color: #0000ff;"&gt;false</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;if</span>(filename.lastIndexOf("/") != -1){ <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;检查此文件是否带有文件夹</span> ismkdir = <span style="color: #0000ff;"&gt;true</span><span style="color: #000000;"&gt;; } filename </span>= savepath +<span style="color: #000000;"&gt; filename; </span><span style="color: #0000ff;"&gt;if</span>(entry.isDirectory()){ <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;如果是文件夹先创建</span> file = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; File(filename); file.mkdirs(); </span><span style="color: #0000ff;"&gt;continue</span><span style="color: #000000;"&gt;; } file </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; File(filename); </span><span style="color: #0000ff;"&gt;if</span>(!file.exists()){ <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;如果是目录先创建</span> <span style="color: #0000ff;"&gt;if</span><span style="color: #000000;"&gt;(ismkdir){ </span><span style="color: #0000ff;"&gt;new</span> File(filename.substring(0,filename.lastIndexOf("/"))).mkdirs(); <span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;目录先创建</span>

<span style="color: #000000;"> }
}
file.createNewFile(); <span style="color: #008000;">//<span style="color: #008000;">创建文件
<span style="color: #000000;">
is =<span style="color: #000000;"> zipFile.getInputStream(entry);
fos = <span style="color: #0000ff;">new<span style="color: #000000;"> FileOutputStream(file);
bos = <span style="color: #0000ff;">new<span style="color: #000000;"> BufferedOutputStream(fos,buffer);

             </span><span style="color: #0000ff;"&gt;while</span>((count = is.read(buf)) > -1<span style="color: #000000;"&gt;)
             {
                 bos.write(buf,</span>0<span style="color: #000000;"&gt;,count);
             }
             bos.flush();
             bos.close();
             fos.close();

             is.close();
         }

         zipFile.close();

     }</span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt;(IOException ioe){
         ioe.printStackTrace();
     }</span><span style="color: #0000ff;"&gt;finally</span><span style="color: #000000;"&gt;{
            </span><span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt;{
            </span><span style="color: #0000ff;"&gt;if</span>(bos != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;){
                bos.close();
            }
            </span><span style="color: #0000ff;"&gt;if</span>(fos != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) {
                fos.close();
            }
            </span><span style="color: #0000ff;"&gt;if</span>(is != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;){
                is.close();
            }
            </span><span style="color: #0000ff;"&gt;if</span>(zipFile != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;){
                zipFile.close();
            }
            }</span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt;(Exception e) {
                e.printStackTrace();
            }
        }
    }

}

指定目录重新的方法如下:

count = -1 File file </span>= <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;; InputStream is </span>= <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;; FileOutputStream fos </span>= <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;; BufferedOutputStream bos </span>= <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;; ZipFile zipFile </span>= <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt; { zipFile </span>= <span style="color: #0000ff;"&gt;new</span> ZipFile(path,count); } bos.flush(); bos.close(); fos.close(); is.close(); } zipFile.close(); }</span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt;(IOException ioe){ ioe.printStackTrace(); }</span><span style="color: #0000ff;"&gt;finally</span><span style="color: #000000;"&gt;{ </span><span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt;{ </span><span style="color: #0000ff;"&gt;if</span>(bos != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;){ bos.close(); } </span><span style="color: #0000ff;"&gt;if</span>(fos != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;) { fos.close(); } </span><span style="color: #0000ff;"&gt;if</span>(is != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;){ is.close(); } </span><span style="color: #0000ff;"&gt;if</span>(zipFile != <span style="color: #0000ff;"&gt;null</span><span style="color: #000000;"&gt;){ zipFile.close(); } }</span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt;(Exception e) { e.printStackTrace(); } } }</span></pre>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读