`
张豆包
  • 浏览: 16364 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java 文件解压(支持中文,非插件)

    博客分类:
  • Java
阅读更多

java自带有文件解压缩的功能,但很多人都不用,都说其不支持中文。但我只想说,那是他们没有去深入了解java。

现在就说文件的解压功能,使用java自带的zip操作类,支持中文。

 

	public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
		//配置文件
//		FileConfigUtil configUtil = FileConfigUtil.getInstance();
//		configUtil.loadFileConfigUtil("D:\\file-upload.properties");
//		FileConfigUtil.getFileUploadConfig();
		//zip文件解压
		
		ParseZipFile zipFile = new ParseZipFile();
		String zipFilePath = "D:/test/错误图片数据.zip";
		String outFilePath = "D:/新建文件夹";
		zipFile.parseZipFile(zipFilePath, outFilePath);
	}

 

 

 

public void parseZipFile(String zipFilePath,String outFilePath){
		if(zipFilePath == null || zipFilePath.isEmpty() 
				|| outFilePath == null || outFilePath.isEmpty()){
			return null;
		}else{
			try {
				//转化为iso_8859_1,用于解压,如若包含中文,会生成失败。
				ZipFile zipFile = new ZipFile(zipFilePath,StandardCharsets.ISO_8859_1);
				ZipInputStream in = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFilePath)),StandardCharsets.ISO_8859_1);
				ZipEntry zipEntry;
				while ((zipEntry = in.getNextEntry()) != null) {
					if(!zipEntry.isDirectory()){
						File file = new File(outFilePath + "/" + new String(zipEntry.getName().getBytes(
								StandardCharsets.ISO_8859_1), "gbk"));
						System.out.println(file.getName());
						if(!file.exists()) {
							if(!file.getParentFile().exists()){
								file.getParentFile().mkdirs();
							}
							file.createNewFile();
				        }
						FileOutputStream out = new FileOutputStream(file);
						InputStream is = zipFile.getInputStream(zipEntry);
						int readLen = 0;
					    byte[] buffer = new byte[1024 * 8];
					    while ((readLen = is.read(buffer, 0, 1024 * 8)) != -1){
					    	out.write(buffer, 0, readLen);
					    }
						out.close();
						is.close();
					}
				}
				in.close();
				zipFile.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			
			return null;
		}
	}

 其实在以前的文章中就提过,java本身转换的字符到底是什么格式,很难说。

但在这里,先转化为iso8859然后,再转回gbk。如果转换为utf-8的话,可能会出现乱码。

所以大致可以猜测,在文件这一块,java也许使用的并不是utf-8。

当然,这只是可能。

不过,还是那句话,java的很多定义不可能是无厘头写上去的。只要去深入研究,你会发现解决方法的。

 

分享到:
评论

相关推荐

    java rar解压工具类

    java rar解压工具类 // 第一个参数是需要解压的压缩包路径,第二个参数参考JdkAPI文档的RandomAccessFile //r代表以只读的方式打开文本,也就意味着不能用write来操作文件

    基于java的开发源码-用GZIP压缩解压文件.zip

    基于java的开发源码-用GZIP压缩解压文件.zip 基于java的开发源码-用GZIP压缩解压文件.zip 基于java的开发源码-用GZIP压缩解压文件.zip 基于java的开发源码-用GZIP压缩解压文件.zip 基于java的开发源码-用GZIP压缩...

    反编译java class文件的Eclipse插件

    反编译java class文件的Eclipse插件,解压后将文件分别copy到对应的features 和plugins目录即可

    Eclipse离线安装SVN插件,将该文件解压后直播复制到你Eclipse安装目录下的dropins目录里即可。

    Eclipse离线安装SVN插件,将该文件解压后直播复制到你Eclipse安装目录下的dropins目录里即可。比如说你eclipse安装在 D:\eclipse\ ,你解压后将subclipse下的文件拷贝到下面目录里重新Eclipse就可以了。D:\eclipse\...

    java project 在tomcat下调试插件

    java project 在tomcat下调试插件,解压后存放在eclipse--features目录下,具体使用请参照包下readme.html文件

    java反编译工具(含MyEclipse插件)

    第三步、我们把第二个文件解压、得到一个jad.exe文件、我们可以把这个文件放在我们想放的任何位置、例如:D:\123\abc这个路径下。随后我们只要在Windows——>Perference——>Java——>JadClipse下设置path to ...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java桌面反编译插件jd-gui直接解压使用

    java桌面反编译插件jd-gui直接解压使用,可以文件直接拖动进去,或者自己在里面选择,容易用。。

    java项目打包成jar的第三方插件

    用Eclipse的一个第三方插件fatjar生成jar文件,也是本人觉得最简单最方便的一种生成方式。先从网上下载些插件,解压后是一个plugins的文件夹,里面只有一个文件夹,我的是“net.sf.fjep.fatjar_0.0.24”将它copy到...

    java图形界面编程插件

    java图形界面编程可视化组件插件,只需要把文件解压 复制到myeclipse的安装路径下,修改link文件中的路径即可

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包4

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    个人在用的java属性文件编辑Eclipse插件

    支持3.2 3.5 3.5本人在用,只要解压后放到dropins文件夹下即可使用

    eclipse 反编译插件 java工具JadClipse

    eclipse 反编译插件 java工具JadClipse 将JadClipse插件(net.sf.jadclipse_3.3.0.jar)拷贝到{EclipseHome}/plugins文件夹下(如C:\Program F\eclipse-jee-kepler-R-win32-x86_64\eclipse\plugins)。JAD 解压到...

    java源码包3

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java技术员必下的最强大的插件,搜索JSmart_1.3.1.jar(寻觅插件)然后下载

    文件太大,无法上传,请联系... 2008年6月修正了生成自定义MVC框架时的包名不能自定义的bug,修正了MYECLIPSE5.5开发struts1.3的bug 自定义MVC框架时加入了批量生成功能,支持多选文件  加入了运行前的提示框

    staruml-java-0.9.5.zip

    startUML java插件 操作步骤: 1.在这个目录:可能有差异 C:\Users\Administrator\AppData\...2.将文件解压,进入到文件夹,拷贝所有文件到新建的staruml.java 中 3.重启startUML tools-java 就可以看到java了

    eclipse Java 反编译插件

    eclipse Java 反编译插件,先将文件解压出来变成jd-eclipse-site-1.0.0-RC2.zip,Help > Install New Software...>Add(jd-eclipse-site-1.0.0-RC2.zip)>next>next>Finish添加就可以了使用了

    Eclipse语言插件包(中文)

    eclipse中文语言插件包,适用于eclipse-jee-2019-06-R-win32-x86_64版本 使用方法:解压后,将相关文件覆盖至对应目录即可

Global site tag (gtag.js) - Google Analytics