精华内容
下载资源
问答
  • 1.解压文件public static Map unzip(File zipFile) throws IOException {Map map = new Hashtable();org.apache.tools.zip.ZipFile zfile = new org.apache.tools.zip.ZipFile(zipFile,"GBK");Enumeration> ...

    1.解压文件

    public static Map unzip(File zipFile) throws IOException {

    Map map = new Hashtable();

    org.apache.tools.zip.ZipFile zfile = new org.apache.tools.zip.ZipFile(zipFile,"GBK");

    Enumeration> enumeration = zfile.getEntries();

    InputStream is = null;

    while (enumeration.hasMoreElements()) {

    ZipEntry entry = (ZipEntry) enumeration.nextElement();

    if (!entry.isDirectory()) {

    is = zfile.getInputStream(entry);

    BufferedInputStream bis = new BufferedInputStream(is);

    File temp = new File(Constant.FTP_LOCAL_DIR+""+CommonUtils.getToday()+"_upload/"+entry.getName());

    if(!temp.getParentFile().exists()){

    temp.getParentFile().mkdirs();

    }

    OutputStream bos = new FileOutputStream(temp);

    IOUtils.copy(bis, bos);

    bis.close();

    bos.close();

    is.close();

    map.put(entry.getName(), temp);

    }

    }

    return map;

    }

    2.压缩文件

    private static File zip(List fileList,String zipFileName) throws Exception{

    File zipFile=null;

    if (fileList.size() > 0) {

    zipFile = new File(zipFileName);

    FileOutputStream fos = new FileOutputStream(zipFile);

    ZipOutputStream zos = new ZipOutputStream(fos);

    for (File f : fileList) {

    ZipEntry entry = new ZipEntry(f.getName());

    zos.setEncoding("gbk");

    zos.putNextEntry(entry);

    CommonUtils.addFile(f, zos);

    }

    zos.close();

    fos.close();

    }

    return zipFile;

    }

    public static void addFile(File file, OutputStream zos) throws IOException {

    InputStream in = new FileInputStream(file);

    byte[] b = new byte[1024000];

    int length;

    while ((length = in.read(b)) > -1) {

    zos.write(b, 0, length);

    zos.flush();

    }

    in.close();

    }

    展开全文
  • Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)学习了:http://www.tuicool.com/articles/V7BBvy引用原文:JDK中自带的ZipOutputStream在压缩文件时,如果文件名中有中文,则压缩后的zip文件打开时发现中文文件名...

    Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)

    学习了:http://www.tuicool.com/articles/V7BBvy

    引用原文:

    JDK中自带的ZipOutputStream在压缩文件时,如果文件名中有中文,则压缩后的

    zip文件打开时发现中文文件名变成乱码.

    解决的方法是使用apache-ant-zip.jar包(见附件)中的ZipOutputStream和ZipEntry.

    即,导入类:

    import org.apache.tools.zip.ZipEntry;

    import org.apache.tools.zip.ZipOutputStream;

    并且注意,压缩之前调用 ZipOutputStream的out.setEncoding(System.getProperty("sun.jnu.encoding")); 方法,

    系统参数sun.jnu.encoding表示获取当前系统中的文件名的编码方式.这里将ZipOutputStream的文件名编码方式

    设置成系统的文件名编码方式.

    解压时,直接使用JDK原来的ZipInputStream即可.

    但是有个 需要注意 的地方是,在读取ZIP文件之前,需要设置:

    System.setProperty("sun.zip.encoding", System.getProperty("sun.jnu.encoding"));

    将系统的ZIP编码格式设置为系统文件名编码方式,否则解压时报异常.

    (网上,还有修改ZipInputStream源码的方式貌似太麻烦了,参考:http://zwllxs.iteye.com/blog/871260)

    ZIP代码参考http://szhnet.iteye.com/blog/199059,有修改.

    展开全文
  • java实现zip压缩中文文件名乱码的解决办法:一、文件压缩的中文乱码问题1、中文文件名的乱码解决对于压缩的文件,当文件名称是中文时,若使用JDK API中自带的类(java.util.zip.ZipEntry; java.util.zip....

    c9915b78fd24ac7aa5db33be569a1566.png

    java实现zip压缩中文文件名乱码怎么办?

    java实现zip压缩中文文件名乱码的解决办法:

    一、文件压缩的中文乱码问题

    1、中文文件名的乱码解决

    对于压缩的文件,当文件名称是中文时,若使用JDK API中自带的类(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)进行压缩,压缩完成后,可以看到压缩包中的文件名称是乱码(文件的内容无乱码问题)。此时只要用ANT中的ant.jar中的类(org.apache.tools.zip.ZipEntry; org.apache.tools.zip.ZipOutputStream;)就可以解决此问题。

    2、ant.jar依赖

    ant

    ant

    1.6.5

    二、JAVA实现ZIP压缩源代码import java.io.File;

    import java.io.FileInputStream;

    import java.io.FileNotFoundException;

    import java.io.FileOutputStream;

    import java.io.IOException;

    import java.io.OutputStream;

    import org.apache.tools.zip.ZipEntry;

    import org.apache.tools.zip.ZipOutputStream;

    import org.slf4j.Logger;

    import org.slf4j.LoggerFactory;

    /**

    * zip压缩工具包

    * @Class ZipUtils

    */

    public class ZipUtils {

    private final static Logger logger = LoggerFactory.getLogger(ZipUtils.class);

    private static final int BUFFER_SIZE = 2 * 1024;

    /**

    * 压缩成ZIP

    * @param srcFilePath 压缩文件路径

    * @param tarFilePath 目标ZIP输出路径

    * @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构;

    * false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)

    * @throws Exception 压缩失败会抛出异常

    */

    public static boolean toZip(String srcFilePath, String tarFilePath, boolean KeepDirStructure) throws Exception {

    boolean isCompressSuccess = false;

    long start = System.currentTimeMillis();

    FileOutputStream fos = null;

    ZipOutputStream zos = null;

    try {

    File sourceFile = new File(srcFilePath);

    if (!sourceFile.exists()) {

    throw new FileNotFoundException("待压缩文件 [" + srcFilePath + "]不存在.");

    }

    fos = new FileOutputStream(new File(tarFilePath));

    zos = new ZipOutputStream(fos);

    // 设置压缩的编码,解决压缩路径中的中文乱码问题

    zos.setEncoding("UTF-8");

    compress(sourceFile, zos, sourceFile.getName(), KeepDirStructure);

    isCompressSuccess = true;

    long end = System.currentTimeMillis();

    logger.info("【文件压缩】 压缩完成,耗时:{} ms", (end - start));

    } catch (Exception e) {

    logger.error("【文件压缩】 压缩失败", e);

    throw new RuntimeException("文件压缩失败", e);

    } finally {

    closeOutPutStream(zos);

    closeOutPutStream(fos);

    }

    return isCompressSuccess;

    }

    /**

    * 递归压缩方法

    * @param sourceFile 源文件

    * @param zos zip输出流

    * @param name 压缩后的名称

    * @param KeepDirStructure 是否保留原来的目录结构,true:保留目录结构;

    * false:所有文件跑到压缩包根目录下(注意:不保留目录结构可能会出现同名文件,会压缩失败)

    * @throws Exception

    */

    private static void compress(File sourceFile, ZipOutputStream zos, String name, boolean KeepDirStructure)

    throws Exception {

    byte[] buf = new byte[BUFFER_SIZE];

    if (sourceFile.isFile()) {

    // 向zip输出流中添加一个zip实体,构造器中name为zip实体的文件的名字

    zos.putNextEntry(new ZipEntry(name));

    // copy文件到zip输出流中

    int len;

    FileInputStream in = new FileInputStream(sourceFile);

    while ((len = in.read(buf)) != -1) {

    zos.write(buf, 0, len);

    }

    zos.closeEntry();

    in.close();

    } else {

    File[] listFiles = sourceFile.listFiles();

    if (listFiles == null || listFiles.length == 0) {

    // 需要保留原来的文件结构时,需要对空文件夹进行处理

    if (KeepDirStructure) {

    // 空文件夹的处理

    zos.putNextEntry(new ZipEntry(name + "/"));

    // 没有文件,不需要文件的copy

    zos.closeEntry();

    }

    } else {

    for (File file : listFiles) {

    // 判断是否需要保留原来的文件结构

    if (KeepDirStructure) {

    // 注意:file.getName()前面需要带上父文件夹的名字加一斜杠,

    // 不然最后压缩包中就不能保留原来的文件结构,即:所有文件都跑到压缩包根目录下了

    compress(file, zos, name + "/" + file.getName(), KeepDirStructure);

    } else {

    compress(file, zos, file.getName(), KeepDirStructure);

    }

    }

    }

    }

    }

    /**

    * 释放资源

    * @Title closeOutPutStream

    * @param ops

    * @return void

    */

    public static void closeOutPutStream(OutputStream ops) {

    if (ops != null) {

    try {

    ops.close();

    } catch(IOException ex) {

    logger.error("关闭输出流失败", ex);

    }

    }

    }

    }

    展开全文
  • JDK1.5中有zip压缩相关的API,在java.util.zip包下面。正常情况下,使用JDK自带的API把目录(文件)压缩成zip包,步骤如下: ZipOutputStream out = new ZipOutputStream(new FileOutputS...

    Java Zip 压缩目录(文件)之中文乱码问题

    运行环境

             Jdk 1.5win 7中文版

     

    JDK1.5中有zip压缩相关的API,在java.util.zip包下面。正常情况下,使用JDK自带的API把目录(文件)压缩成zip包,步骤如下:

     

    ZipOutputStream out = new ZipOutputStream(new FileOutputStream(file));

    Out.putNextEntry(new ZipEntry(entryName));

    //If entry is directory

    //above codes are enough

    //else if entry is file

    //then the codes below is needed

    FileInputStream in = new FileInputStream(infile);

    byte[] bs = newbyte[1024];

    int b = 0;

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

    zos.write(bs, 0, b);

    }

    in.close();

     

    如果要打包的目录名或文件名中包含中文字符,这些目录或文件的名称就会出现乱码,原因是JDK自带的API中,在写入ZipEntry的时候,采用的编码默认的是UTF8(貌似还只有这一种,没办法更改,据说Java7有所改善),而win7操作系统中文版在处理zip文件的时候采用的是GBK编码,编码和解码的处理不同,造成了打包之后的文件在win7中文版中看到的是乱码。

     

    可以采用的解决方案是通过利用第三方API实现zip压缩,以解决中文乱码问题。以下是利用apachecompresszip压缩的实现,所需jar包为commons-compress-1.2.jar,其官方下载地址为http://commons.apache.org/compress/download_compress.cgi

     

    ArchiveOutputStream os = new ArchiveStreamFactory()

                  .createArchiveOutputStream(ArchiveStreamFactory.ZIP, out);

    if(os instanceof ZipArchiveOutputStream) {

    ((ZipArchiveOutputStream) os).setEncoding("GBK");

    }

    //...some code omitted

    os.putArchiveEntry(new ZipArchiveEntry(path+"/"+file.getName()));

    IOUtils.copy(new FileInputStream(file), os);

    os.closeArchiveEntry();

    转载于:https://www.cnblogs.com/un4sure/archive/2011/09/27/2193298.html

    展开全文
  • java实现zip压缩中文文件名乱码的解决办法:一、文件压缩的中文乱码问题1、中文文件名的乱码解决对于压缩的文件,当文件名称是中文时,若使用JDK API中自带的类(java.util.zip.ZipEntry; java.util.zip....
  • 1.解压文件 [code="java"] public static Map unzip(File zipFile) throws IOException { Map map = new Hashtable(); org.apache.tools.zip.ZipFile zfile = new org.apache.tools.zip.ZipFile...
  • 主要介绍了java压缩zip文件中文乱码问题的解决方法,需要的朋友可以参考下
  • 如何解决java压缩文件乱码问题发布于 2020-3-15|复制链接在本篇文章中我们给大家分享的是一篇关于java压缩文件乱码问题的解决办法,有需要的朋友们可以学习下。用java来打包文件生成压缩文件,有两个地方会出现乱码...
  • java zip压缩文件中文文件名乱码

    千次阅读 2018-01-03 08:42:36
    最近使用java.util.zipoutputstream发现中文名出现乱码,一直试着使用new String(filename.getBytes("GBK"),"ISO-8859-1");还是无效。后来查阅资料,java.util.zipoutputstream无法设置字符集,建议使用org.apache....
  • javaZIP压缩文件

    2019-09-30 12:18:37
    问题描述: java ZIP压缩文件 问题解决: 说明: 防止创建压缩文件中中文乱码,需要导入的包: (1)创建ZipOutputStream 注: 以上引用org.apache.tools.zip.ZipOutputStream可以防止中文乱码 (2)单文件压缩 注:...
  • 查看原文:http://www.noblog.cn/906.html1:jar包commons-compress-1.0.jarcommons-io.jarimport org.apache.commons.compress.archivers....importorg.apache.commons.compress.archivers.zip.ZipArchiveInputS...
  • java压缩zip文件中文乱码问题

    千次阅读 2019-05-24 15:06:53
    java来打包文件生成压缩文件,有两个地方会出现乱码 1、内容的中文乱码问题,这个问题网上很多人给出了解决方法,两种:修改sun的源码;使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools....
  • Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
  • 对于Java自身自带的压缩文件操作来说,最大的弊端应该就是对中文的不支持,所以很多人都会去选择apache公司提供的。然而apache公司提供的同样也有语言问题。但Java自身的就不会。 在我去网上找过相关的资料,发现...
  • java来打包文件生成压缩文件,有两个地方会出现乱码:内容的中文乱码问题:修改sun的源码。使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,这两个类ant.jar中有,可以下载...
  • 本文实例讲述了Java创建ZIP压缩文件的方法。分享给大家供大家参考。具体如下:这里注意:建议使用org.apache.tools.zip.*包下相关类,否则可能会出现中文乱码问题。/*** 压缩文件夹* @param sourceDIR 文件夹名称...
  • JDK中自带的ZipOutputStream在压缩文件时,如果文件名中有中文,则压缩后的zip文件打开时发现中文文件名变成乱码.解决的方法是使用apache-ant-zip.jar包(见附件)中的ZipOutputStream和ZipEntry.即,导入类:import org....
  • File outFileDir = new File(outDir);if (!outFileDir.exists()) {boolean isMakDir = ...if (isMakDir) {log.info("创建压缩目录成功");}}ZipFile zip = new ZipFile(zipFile, "gbk");for (Enumeration en...
  • java来打包文件生成压缩文件,有两个地方会出现乱码:内容的中文乱码问题:修改sun的源码。使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry,这两个类ant.jar中有,可以下载...
  • java压缩zip文件解决中文乱码问题

    热门讨论 2010-11-02 15:45:04
    java压缩文件zip实现无乱码 内置类与jar包
  • 三种不错的方法:1、jdk自带的包java.util.zip.ZipOutputStream,不足之处,文件(夹)名称带中文时,出现乱码问题,实现代码如下:/***功能:把sourceDir目录下的所有文件进行zip格式的压缩,保存为指定zip文件*@...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 436
精华内容 174
关键字:

javazip压缩文件乱码

java 订阅