前几天写了文章介绍java文件夹的压缩(见

http://zwllxs.iteye.com/blog/836483),但是发现一个问题,在linux下,如果文件夹内的文件是中文名,那么压缩后,这些文件名全部成为了乱码而无法解压,要能支持linux压缩,有两点:

1:再压缩前,要设置linux模式,

如果是文件目录,则

ZipEntry zipEntry=new ZipEntry(basePath + System.getProperties().getProperty("file.separator"));

zipEntry.setUnixMode(755);//解决linux乱码

如果是文件,则

ZipEntry zipEntry=new ZipEntry(base);

zipEntry.setUnixMode(644);//解决linux乱码

然后在输出时强制设置编码:

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(

zipFileName));

out.setEncoding("GBK");//解决linux乱码

全部代码如下:

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.OutputStream;

import org.apache.tools.zip.ZipEntry;

import org.apache.tools.zip.ZipOutputStream;

/**

* 文件夹压缩,支持win和linux

* @author wlzhang

*

*/

public class ZipUtil

{

/**

* @param inputFileName

* 输入一个文件夹

* @param zipFileName

* 输出一个压缩文件夹,打包后文件名字

* @throws Exception

*/

public static OutputStream zip(String inputFileName, String zipFileName) throws Exception

{

return zip(zipFileName, new File(inputFileName));

}

private static OutputStream zip(String zipFileName, File inputFile) throws Exception

{

ZipOutputStream out = new ZipOutputStream(new FileOutputStream(

zipFileName));

out.setEncoding("GBK");//解决linux乱码

zip(out, inputFile, "");

out.close();

return out;

}

private static void zip(ZipOutputStream out, File f, String base) throws Exception

{

if (f.isDirectory())

{ // 判断是否为目录

File[] fl = f.listFiles();

// out.putNextEntry(new org.apache.tools.zip.ZipEntry(base + "/"));

// out.putNextEntry(new ZipEntry(base + "/"));

ZipEntry zipEntry=new ZipEntry(base + System.getProperties().getProperty("file.separator"));

zipEntry.setUnixMode(755);//解决linux乱码

out.putNextEntry(zipEntry);

// base = base.length() == 0 ? "" : base + "/";

base = base.length() == 0 ? "" : base + System.getProperties().getProperty("file.separator");

for (int i = 0; i < fl.length; i++)

{

zip(out, fl[i], base + fl[i].getName());

}

}

else

{ // 压缩目录中的所有文件

// out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));

ZipEntry zipEntry=new ZipEntry(base);

zipEntry.setUnixMode(644);//解决linux乱码

out.putNextEntry(zipEntry);

FileInputStream in = new FileInputStream(f);

int b;

while ((b = in.read()) != -1)

{

out.write(b);

}

in.close();

}

}

}

以上代码就同时支持win和linux

linux下 java 压缩文件夹,java压缩文件夹linux下乱码问题相关推荐

  1. Java批量完成对文件夹下全部的css与js压缩,利用yuicompressor

    大部分代码我是从网上找的, 只有对文件的遍历是我自己写的: 其实原理十分简单 利用yuicompressor已经编好的方法,我们写一个Java程序来调用即可: yuicompressor-2.4.8. ...

  2. linux右键无法解压gz文件夹,Linux/centos下zip、tar、gz压缩解压命令

    Linux下的压缩解压缩命令详解及实例 实例:压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip == ...

  3. java代码实现文件或文件夹的压缩和解压

    这里写了个工具类,可以实现文件的压缩和解压功能. package com.cntaiping.tpi.common.utils;import java.io.BufferedInputStream; ...

  4. java压缩zip文件夹错误_Java将文件或者文件夹压缩成zip(修复文件夹中存在多个文件报Stream Closed错误问题)...

    项目场景: Java将文件或者文件夹压缩成zip(修复文件夹中存在多个文件报Stream Closed错误问题) 问题描述: 最近的项目需要将多级文件夹压缩成zip,网上找了几个工具类,都会报错,所以 ...

  5. java将文件夹压缩成zip java按照目录结构压缩文件夹

    前言 用java将文件夹压缩成zip包,像压缩软件一样,按照目录结构压缩(包含当前文件夹) 网上没有找到太合适的,借鉴其它帖子,自己写了一个 代码 package xin.yangshuai.myba ...

  6. Java导入,导出,多层文件夹压缩(业务复杂)

    SpringBoot项目 Zip工具类 package com.pty.bip.common.util;import java.io.*; import java.util.List; import ...

  7. Java 获取linux根目录下的文件夹_Windows支持直接访问Linux子系统文件:你的下一台Linux何必是Linux...

    2020年第一波薅当当网羊毛的机会,别错过! 晓查 发自 凹非寺 量子位 报道 | 公众号 QbitAI 微软,致力于做最好的Linux发行版. 今天,安装Windows 10测试版本号19603的用 ...

  8. java多级目录文件是否存在_Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析)...

    兼容windows和linux. 分析: 在windows下路径有以下表示方式: (标准)D:\test\1.txt (不标准,参考linux)D:/test/1.txt 然后在java中,尤其使用F ...

  9. Java实现zip文件压缩:单个文件、文件夹以及文件和文件夹的压缩

    // 测试 ZipUtil.zipFiles(new File("D:/abc"), new File("a123.zip")); import java.io ...

最新文章

  1. 极客新闻——08、高效团队善用的3个敏捷方法
  2. webpack 项目使用 html-webpack-plugin(3)
  3. [解决方案]SystemError: Parent module ‘‘ not loaded, cannot perform relative import的解决方案
  4. 美国商务部工业和安全局(BIS)发布《关于拟制定脑机接口技术出口管制规则的通知》...
  5. windows下eclipse连接hadoop
  6. [转载]基于MVC4+EasyUI的Web开发框架经验总结(8)--实现Office文档的预览
  7. zookeeker如何解决HBase单节点故障
  8. Flex 3调试Flash Player 10完美解决
  9. 1.8 编程基础之多维数组 09 矩阵乘法 6分 python
  10. 会聊天到底有多重要?汽车语音识别大盘点
  11. 使用Varnish为web网站加速
  12. AI人工智能的5种绝佳编程语言
  13. 计算机表格计算公式加法,加法公式excel,excel表格如何用公式计算加减乘除混合运算?...
  14. Ubuntu20.04 截图工具推荐
  15. matlab的金融分析工具,金融分析利器之 MATLAB空间计量工具箱
  16. 【端口扫描工具】mascan核心使用
  17. tapestry mysql_tapestry与mybatis模块的结合
  18. 知网caj文件转pdf(无需下载任何软件,傻瓜式操作,必看!!!)
  19. python安全之Pickle反序列化漏洞学习。
  20. 图像处理大型科普——图像直方图

热门文章

  1. 中国超级计算机扩大领先优势:TOP500总量首次超越美国
  2. android AIDL 入门讲解非常好的文章(网页代码着色给力)
  3. SQL Server 2008 Datetime Cast 成 Date 类型可以使用索引(转载)
  4. Skype for Business Server 2015-13-IISARR-2-发布-2-前端服务器
  5. 【SPOJ1297】Palindrome (SA+RMQ)
  6. CxImage使用心得(转载)
  7. 利用SCCM 2007 软件分发
  8. MYSQL - database 以及 table 的增删改查
  9. EasyUI 异步Tree
  10. Android,已知应用名称, 通过应用名称来启动应用