Java 文件解压(支持中文,非插件)_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java 文件解压(支持中文,非插件)

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

 2015/1/9 12:31:35  张豆包  程序员俱乐部  我要评论(0)
  • 摘要:java自带有文件解压缩的功能,但很多人都不用,都说其不支持中文。但我只想说,那是他们没有去深入了解java。现在就说文件的解压功能,使用java自带的zip操作类,支持中文。publicstaticvoidmain(String[]args)throwsNoSuchFieldException,SecurityException,IllegalArgumentException,IllegalAccessException,InvocationTargetException
  • 标签:

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

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

?

class="java" name="code">	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的很多定义不可能是无厘头写上去的。只要去深入研究,你会发现解决方法的。

?

  • 相关文章
发表评论
用户名: 匿名