`

java压缩----使用sun JDK压缩--中文的文件名会是乱码

 
阅读更多

经测试,文件名为中文的压缩完为乱码,测试过.txt 的文件类型,中文内容可以正常显示。

所以这种方案不可行。

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.FileUtils;
/**
 * @author  压缩指定的目录以及解压指定的压缩文件(仅限ZIP格式).
 */
	public class ZipUtils {

	    /**
		 * 将指定目录下的所有文件压缩并生成指定路径的压缩文件. 如果压缩文件的路径或父路径不存在, 将会自动创建.
		 * 
		 * @param src
		 *            将要进行压缩的目录
		 * @param zip
		 *            最终生成的压缩文件的路径
		 */
	    public static void zip(File src, File zip) throws IOException {
	        zip(src, FileUtils.openOutputStream(zip));
	    }

	    /**
		 * 将指定目录下的所有文件压缩并将流写入指定的输出流中.
		 * 
		 * @param src
		 *            将要进行压缩的目录
		 * @param out
		 *            用于接收压缩产生的文件流的输出流
		 */
	    public static void zip(File src, OutputStream out) throws IOException {
	        zip(src, new ZipOutputStream(out));
	    }

	    /**
		 * 将指定目录下的所有文件压缩并将流写入指定的ZIP输出流中.
		 * 
		 * @param src
		 *            将要进行压缩的目录
		 * @param zout
		 *            用于接收压缩产生的文件流的ZIP输出流
		 */
	    public static void zip(File src, ZipOutputStream zout) throws IOException {
	        try {
	            doZip(src, zout, "");
	        } finally {
	            IOUtils.closeQuietly(zout);
	        }
	    }

	    /**
		 * 将指定的压缩文件解压到指定的目标目录下. 如果指定的目标目录不存在或其父路径不存在, 将会自动创建.
		 * 
		 * @param zip
		 *            将会解压的压缩文件
		 * @param dest
		 *            解压操作的目录目录
		 */
	    public static void unzip(File zip, File dest) throws IOException {
	        unzip(FileUtils.openInputStream(zip), dest);
	    }

	    /**
		 * 将指定的输入流解压到指定的目标目录下.
		 * 
		 * @param in
		 *            将要解压的输入流
		 * @param dest
		 *            解压操作的目标目录
		 */
	    public static void unzip(InputStream in, File dest) throws IOException {
	        unzip(new ZipInputStream(in), dest);
	    }

	    /**
		 * 将指定的ZIP输入流解压到指定的目标目录下.
		 * 
		 * @param zin
		 *            将要解压的ZIP输入流
		 * @param dest
		 *            解压操作的目标目录
		 */
	    public static void unzip(ZipInputStream zin, File dest) throws IOException {
	        try {
	            doUnzip(zin, dest);
	        } finally {
	            IOUtils.closeQuietly(zin);
	        }
	    }

	    /**
		 * @param src 源文件目录或者文件
		 * @param zout 输出的流
		 * @param ns
		 */
	    private static void doZip(File src, ZipOutputStream zout, String ns)
	            throws IOException {
	        for (File file : src.listFiles()) {
	            String entryName = ns + file.getName();
	            if (file.isDirectory()) {
	                System.out.println("adding: {}"+entryName + "/");
	                zout.putNextEntry(new ZipEntry(entryName));
	                doZip(file, zout, entryName);
	            } else {
	                System.out.println("adding: {}"+ entryName);
	                zout.putNextEntry(new ZipEntry(entryName));
	                fillZip(FileUtils.openInputStream(file), zout);
	            }
	        }
	    }

	    /**
		 * @param zin
		 * @param dest
		 */
	    private static void doUnzip(ZipInputStream zin, File dest)
	            throws IOException {
	        for (ZipEntry e; (e = zin.getNextEntry()) != null; zin.closeEntry()) {
	            File file = new File(dest, e.getName());
	            if (e.isDirectory()) {
	                System.out.println(" creating: {}"+file.getName() + File.separator);
	                FileUtils.forceMkdir(file);
	            } else {
	                System.out.println("inflating: {}"+file);
	                flushZip(zin, FileUtils.openOutputStream(file));
	            }
	        }
	    }

	    /**
		 * @param in
		 * @param zout
		 */
	    private static void fillZip(InputStream in, ZipOutputStream zout)
	            throws IOException {
	        try {
	            IOUtils.copy(in, zout);
	        } finally {
	            IOUtils.closeQuietly(in);
	        }
	    }

	    /**
		 * @param zin
		 * @param out
		 */
	    private static void flushZip(ZipInputStream zin, OutputStream out)
	            throws IOException {
	        try {
	            IOUtils.copy(zin, out);
	        } finally {
	            IOUtils.closeQuietly(out);
	        }
	    }

	    /**
		 * 
		 */
	    private static Logger logger = LoggerFactory.getLogger(ZipUtils.class);
	    
	    public static void main(String[] args){
	    	try {
				ZipUtils.zip(new File("D:\\evidence\\20120712\\重生回到1997_2012071213114144\\言情小说吧_www.xs8.cn")
				, new File("D:\\evidence\\20120712\\重生回到1997_2012071213114144\\言情.zip"));
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	    }
	} 

 

分享到:
评论

相关推荐

    Java中压缩与解压--中文文件名乱码解决办法

    在Java中处理文件的压缩与解压时,经常会遇到中文文件名出现乱码的问题。这个问题主要源于Java中默认使用的编码方式与实际文件名编码不一致,尤其是在Windows系统下,文件名通常采用GB2312或GBK编码,而Java中的`...

    sun-java6-jdk

    【描述】"sun-java6-jdk的安装包" 暗示了这个压缩文件是为了在计算机系统上安装Java 6开发环境而设计的。JDK 6是Java平台的一个重要版本,包含了Java运行时环境(JRE)以及用于构建和测试Java程序的各种工具。此外,...

    Ubuntu下安装sun-java6-jdk和eclipse

    在深入探讨如何在Ubuntu下安装sun-java6-jdk和eclipse之前,我们先来了解一些基础知识,这将有助于更好地理解整个安装过程。 ### Java在Linux系统中的重要性 Java是一种广泛使用的编程语言,它以其“一次编写,...

    JDK ZipEntry压缩中文文件名乱码解决

    项目中碰到问题.jdk zipEntry 压缩中文文件名乱码  上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项.  第二种 就是拿来主义,因为 开源项目 Ant 里已经有...

    java压缩zip文件解决中文乱码问题

    在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...

    java-jdk1.8-8u361-all-jdk-win-linux

    java-jdk1.8-8u361-all-jdk-win-linux 该压缩包中包含jdk1.8-8u361下windows版本和linux版本,其包含快速安装包和对应的jdk压缩包版本,具体内容如下: jdk-8u361-linux-aarch64.rpm jdk-8u361-linux-i586.rpm jdk-8...

    java-jdk1.8-jdk-8u181-windows-x64.zip

    Java JDK 1.8是Java开发工具包的一个重要版本,主要针对Windows x64操作系统设计。JDK(Java Development Kit)是开发和运行Java应用程序必不可少的软件包,它包含了Java编译器、类库以及各种工具,使得开发者能够...

    Java实现文件下载并解决中文文件名乱码

    本文将详细介绍如何使用Java实现文件下载功能,并重点讲解如何解决中文文件名乱码的问题。 #### 一、基本原理与步骤 1. **读取文件**:首先需要将要下载的文件读取到内存中。 2. **设置响应头**:为了正确地告知...

    jdk-1.7-java-7-openjdk-amd64.zip

    标题中的"jdk-1.7-java-7-openjdk-amd64.zip"表明这是一个Java开发工具包(JDK)的压缩文件,版本为1.7,适用于AMD64架构的Linux系统。OpenJDK是Java Development Kit的一个开源实现,由Oracle公司支持并维护。这个...

    java-jdk1.8-jdk-8u202-linux-x64.zip

    1. **下载**:首先,你需要从Oracle官方网站或者通过提供的链接(blog.csdn.net/FL1623863129/article/details/134426730)下载适用于Linux x64的`java-jdk1.8-jdk-8u202-linux-x64.zip`压缩文件。确保文件完整无损...

    aspose aspose-words-23.3-jdk16 aspose-words-23.3-jdk16 aspose-w

    word java 导出 aspose aspose-words-23.3-jdk16word java 导出 aspose aspose-words-23.3-jdk16word java 导出 aspose aspose-words-23.3-jdk16word java 导出 aspose aspose-words-23.3-jdk16word java 导出 ...

    java-8-openjdk-amd64 资源包下载和解包方法.

    Java 8 开发工具包(Java Development Kit,简称JDK)是Java编程语言的重要组成部分,它包含了一系列用于开发和运行Java应用程序的工具。OpenJDK 是一个开源版本的 JDK,由 Oracle 公司主导并维护,它遵循GNU ...

    Java-JDK1.8-windows-x64位

    Java-JDK1.8-windows-x64位——免费不要积分!!! Java-JDK1.8-windows-x64位——免费不要积分!!! Java-JDK1.8-windows-x64位——免费不要积分!!! Java-JDK1.8-windows-x64位——免费不要积分!!! Java-JDK...

    CentOS JAVA jdk-8u202-linux-x64 脚本安装包

    `-z`参数表示使用gzip解压,`-x`表示解压,`-v`用于详细模式显示解压过程,`-f`后面跟的是压缩文件名。 解压后,你会看到一个名为`jdk1.8.0_202`的目录,其中包含了JDK的所有文件和子目录。 3. **执行安装脚本**...

    java-jdk-8u152安装包java-jdk-8u152安装包java-jdk-8u152安装包

    java-jdk-8u152安装包java-jdk-8u152安装包java-jdk-8u152安装包

    java-jdk1.8-jdk-8u201-linux-x64.zip

    Java JDK 1.8是Java开发工具包的一个重要版本,主要针对Linux x64操作系统设计。这个压缩包文件"java-jdk1.8-jdk-8u201-linux-x64.zip"包含了JDK 8u201的安装程序,特别是针对64位Linux系统的版本。JDK是Java语言...

    java-jdk1.8-jdk-8u192-linux-x64.zip

    1. 首先,使用`unzip java-jdk1.8-jdk-8u192-linux-x64.zip`命令解压缩文件。 2. 解压后,你会得到一个名为`jdk-8u192-linux-x64.tar.gz`的文件,使用`tar -zxvf jdk-8u192-linux-x64.tar.gz`命令将其解压到指定目录...

    java-jdk1.8-jdk-8u191-linux-x64.zip

    这个压缩包文件“java-jdk1.8-jdk-8u191-linux-x64.zip”包含了用于在64位Linux系统上安装和使用的JDK 1.8更新191的所有必要组件。JDK(Java Development Kit)是开发和运行Java应用程序的基础,它包括了Java编译器...

    java-jdk1.6-jdk-6u45-windows-x64.zip

    1. 解压缩"java-jdk1.6-jdk-6u45-windows-x64.zip"文件,这将释放出"jdk-6u45-windows-x64.exe"可执行文件。 2. 双击运行"jdk-6u45-windows-x64.exe",安装向导会引导你完成安装过程。通常,你需要选择安装路径,...

    java-jdk1.8-jdk-8u192-windows-x64.zip

    在安装过程中,系统会自动将JDK安装到指定目录,并且一般会默认设置JAVA_HOME环境变量,指向JDK的安装路径,同时将bin目录添加到PATH环境变量中,以便在任何地方都能运行Java命令。 JDK 1.8引入了许多重要的特性,...

Global site tag (gtag.js) - Google Analytics