gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

java中解壓亂碼解決方法

java中解壓亂碼解決方法

第一種使用ant實現的zip解壓縮,其中解壓的亂碼注意使用

public void unZip(String unZipFileName,String outputPath) 其中

this.zipFile = new ZipFile(unZipFileName, "GB18030");是解決中文名亂碼的關鍵。

import java.io.*; import org.apache.tools.zip.*; import java.util.Enumeration;   /**  *<p>  * <b>功能:zip壓縮、解壓(支持中文文件名)</b>  *<p>  * 說明:使用Apache Ant提供的zip工具org.apache.tools.zip實現zip壓縮和解壓功能.  * 解決了由于java.util.zip包不支持漢字的問題。  *   * @author Winty  * @modifier vernon.zheng  */ public class AntZip { 	private ZipFile zipFile; 	private ZipOutputStream zipOut; // 壓縮Zip 	private ZipEntry zipEntry; 	private static int bufSize; // size of bytes 	private byte[] buf; 	private int readedBytes; 	// 用于壓縮中。要去除的絕對父路路徑,目的是將絕對路徑變成相對路徑。 	private String deleteAbsoluteParent;   	/** 	 *構造方法。默認緩沖區大小為512字節。 	 */ 	public AntZip() { 		this(512); 	}   	/** 	 *構造方法。 	 *  	 * @param bufSize 	 *            指定壓縮或解壓時的緩沖區大小 	 */ 	public AntZip(int bufSize) { 		this.bufSize = bufSize; 		this.buf = new byte[this.bufSize]; 		deleteAbsoluteParent = null; 	}   	/** 	 *壓縮文件夾內的所有文件和目錄。 	 *  	 * @param zipDirectory 	 *            需要壓縮的文件夾名 	 */ 	public void doZip(String zipDirectory) { 		File zipDir = new File(zipDirectory); 		doZip(new File[] { zipDir }, zipDir.getName()); 	}   	/** 	 *壓縮多個文件或目錄。可以指定多個單獨的文件或目錄。而 <code>doZip(String zipDirectory)</code> 	 * 則直接壓縮整個文件夾。 	 *  	 * @param files 	 *            要壓縮的文件或目錄組成的<code>File</code>數組。 	 *@param zipFileName 	 *            壓縮后的zip文件名,如果后綴不是".zip", 自動添加后綴".zip"。 	 */ 	public void doZip(File[] files, String zipFileName) { 		// 未指定壓縮文件名,默認為"ZipFile" 		if (zipFileName == null || zipFileName.equals("")) 			zipFileName = "ZipFile";   		// 添加".zip"后綴 		if (!zipFileName.endsWith(".zip")) 			zipFileName += ".zip";   		try { 			this.zipOut = new ZipOutputStream(new BufferedOutputStream( 					new FileOutputStream(zipFileName))); 			compressFiles(files, this.zipOut, true); 			this.zipOut.close(); 		} catch (IOException ioe) { 			ioe.printStackTrace(); 		} 	}   	/** 	 *壓縮文件和目錄。由doZip()調用 	 *  	 * @param files 	 *            要壓縮的文件 	 *@param zipOut 	 *            zip輸出流 	 *@param isAbsolute 	 *            是否是要去除的絕對路徑的根路徑。因為compressFiles() 	 *            會遞歸地被調用,所以只用deleteAbsoluteParent不行。必須用isAbsolute來指明 	 *            compressFiles()是第一次調用,而不是后續的遞歸調用。即如果要壓縮的路徑是 	 *            E:temp,那么第一次調用時,isAbsolute=true,則deleteAbsoluteParent會記錄 	 *            要刪除的路徑就是E: ,當壓縮子目錄E:tempfolder時,isAbsolute=false, 	 *            再遞歸調用compressFiles()時,deleteAbsoluteParent仍然是E: 。從而保證了 	 *            將E:temp及其子目錄均正確地轉化為相對目錄。這樣壓縮才不會出錯。不然絕對 路徑E:也會被寫入到壓縮文件中去。 	 */ 	private void compressFiles(File[] files, ZipOutputStream zipOut, 			boolean isAbsolute) throws IOException {   		for (File file : files) { 			if (file == null) 				continue; // 空的文件對象   			// 刪除絕對父路徑 			if (file.isAbsolute()) { 				if (isAbsolute) { 					deleteAbsoluteParent = file.getParentFile() 							.getAbsolutePath(); 					deleteAbsoluteParent = appendSeparator(deleteAbsoluteParent); 				} 			} else 				deleteAbsoluteParent = "";   			if (file.isDirectory()) {// 是目錄 				compressFolder(file, zipOut); 			} else {// 是文件 				compressFile(file, zipOut); 			} 		} 	}   	/** 	 *壓縮文件或空目錄。由compressFiles()調用。 	 *  	 * @param file 	 *            需要壓縮的文件 	 *@param zipOut 	 *            zip輸出流 	 */ 	public void compressFile(File file, ZipOutputStream zipOut) 			throws IOException {   		String fileName = file.toString();   		/* 去除絕對父路徑。 */ 		if (file.isAbsolute()) 			fileName = fileName.substring(deleteAbsoluteParent.length()); 		if (fileName == null || fileName == "") 			return;   		/* 		 * 因為是空目錄,所以要在結尾加一個"/"。 不然就會被當作是空文件。 ZipEntry的isDirectory()方法中,目錄以"/"結尾. 		 * org.apache.tools.zip.ZipEntry : public boolean isDirectory() { return 		 * getName().endsWith("/"); } 		 */ 		if (file.isDirectory()) 			fileName = fileName + "/";// 此處不能用"\"   		zipOut.putNextEntry(new ZipEntry(fileName));   		// 如果是文件則需讀;如果是空目錄則無需讀,直接轉到zipOut.closeEntry()。 		if (file.isFile()) { 			FileInputStream fileIn = new FileInputStream(file); 			while ((this.readedBytes = fileIn.read(this.buf)) > 0) { 				zipOut.write(this.buf, 0, this.readedBytes); 			} 			fileIn.close(); 		}   		zipOut.closeEntry(); 	}   	/** 	 *遞歸完成目錄文件讀取。由compressFiles()調用。 	 *  	 * @param dir 	 *            需要處理的文件對象 	 *@param zipOut 	 *            zip輸出流 	 */ 	private void compressFolder(File dir, ZipOutputStream zipOut) 			throws IOException {   		File[] files = dir.listFiles();   		if (files.length == 0)// 如果目錄為空,則單獨壓縮空目錄。 			compressFile(dir, zipOut); 		else 			// 如果目錄不為空,則分別處理目錄和文件. 			compressFiles(files, zipOut, false); 	}   	/** 	 *解壓指定zip文件。 	 *  	 * @param unZipFileName 	 *            需要解壓的zip文件名 	 */ 	public void unZip(String unZipFileName) { 		FileOutputStream fileOut; 		File file; 		InputStream inputStream;   		try { 			this.zipFile = new ZipFile(unZipFileName);   			for (Enumeration entries = this.zipFile.getEntries(); entries 					.hasMoreElements();) {   				ZipEntry entry = (ZipEntry) entries.nextElement(); 				file = new File(entry.getName());   				if (entry.isDirectory()) {// 是目錄,則創建之 					file.mkdirs(); 				} else {// 是文件 					// 如果指定文件的父目錄不存在,則創建之. 					File parent = file.getParentFile(); 					if (parent != null && !parent.exists()) { 						parent.mkdirs(); 					}   					inputStream = zipFile.getInputStream(entry);   					fileOut = new FileOutputStream(file); 					while ((this.readedBytes = inputStream.read(this.buf)) > 0) { 						fileOut.write(this.buf, 0, this.readedBytes); 					} 					fileOut.close();   					inputStream.close(); 				} 			} 			this.zipFile.close(); 		} catch (IOException ioe) { 			ioe.printStackTrace(); 		} 	} 	/** 	 *解壓指定zip文件。其中"GB18030"解決中文亂碼 	 *  	 * @param unZipFileName 	 *            需要解壓的zip文件名 	 * @param outputPath 	 *            輸出路徑 	 */ 	public void unZip(String unZipFileName,String outputPath) { 		FileOutputStream fileOut; 		File file; 		InputStream inputStream;   		try { 			this.zipFile = new ZipFile(unZipFileName, "GB18030");   			for (Enumeration entries = this.zipFile.getEntries(); entries 					.hasMoreElements();) {   				ZipEntry entry = (ZipEntry) entries.nextElement(); 				file = new File(outputPath+entry.getName());   				if (entry.isDirectory()) {// 是目錄,則創建之 					file.mkdirs(); 				} else {// 是文件 					// 如果指定文件的父目錄不存在,則創建之. 					File parent = file.getParentFile(); 					if (parent != null && !parent.exists()) { 						parent.mkdirs(); 					}   					inputStream = zipFile.getInputStream(entry);   					fileOut = new FileOutputStream(file); 					while ((this.readedBytes = inputStream.read(this.buf)) > 0) { 						fileOut.write(this.buf, 0, this.readedBytes); 					} 					fileOut.close();   					inputStream.close(); 				} 			} 			this.zipFile.close(); 		} catch (IOException ioe) { 			ioe.printStackTrace(); 		} 	}   	/** 	 *給文件路徑或目錄結尾添加File.separator 	 *  	 * @param fileName 	 *            需要添加路徑分割符的路徑 	 *@return 如果路徑已經有分割符,則原樣返回,否則添加分割符后返回。 	 */ 	private String appendSeparator(String path) { 		if (!path.endsWith(File.separator)) 			path += File.separator; 		return path; 	}   	/** 	 *解壓指定zip文件。 	 *  	 * @param unZipFile 	 *            需要解壓的zip文件對象 	 */ 	public void unZip(File unZipFile) { 		unZip(unZipFile.toString()); 	}   	/** 	 *設置壓縮或解壓時緩沖區大小。 	 *  	 * @param bufSize 	 *            緩沖區大小 	 */ 	public void setBufSize(int bufSize) { 		this.bufSize = bufSize; 	} 	// 主函數,用于測試AntZip類 	/* 	 * public static void main(String[] args)throws Exception{ 	 * if(args.length>=2){ AntZip zip = new AntZip(); 	 *  	 * if(args[0].equals("-zip")){ //將后續參數全部轉化為File對象 File[] files = new File[ 	 * args.length - 1]; for(int i = 0;i < args.length - 1; i++){ files = new 	 * File(args[i + 1]); } 	 *  	 * //將第一個文件名作為zip文件名 zip.doZip(files , files[0].getName()); 	 *  	 * return ; } else if(args[0].equals("-unzip")){ zip.unZip(args[1]); return 	 * ; } } 	 *  	 * System.out.println("Usage:"); 	 * System.out.println("壓縮:java AntZip -zip [directoryName | fileName]... "); 	 * System.out.println("解壓:java AntZip -unzip fileName.zip"); } 	 */   }

第二種 從修改ZipInputStream及ZipOutputStream對於檔名的編碼方式來著手了。

我們可以從jdk的src.zip取得ZipInputStream及ZipOutputStream的原始碼來加以修改:

一、ZipOutputStream.java

1.從jdk的src.zip取得ZipOutputStream.java原始碼,另存新檔存到c:/java/util/zip這個資料夾里,檔名改為CZipOutputStream.java。

2.開始修改原始碼,將class名稱改為CZipOutputStream

3.建構式也必須更改為CZipOutputStream

4.新增member,這個member記錄編碼方式

private String encoding="UTF-8";

5.再新增一個建構式(這個建構式可以讓這個class在new的時候,設定檔名的編碼)

 public CZipOutputStream(OutputStream out,String encoding) {       super(out, new Deflater(Deflater.DEFAULT_COMPRESSION, true));       usesDefaultDeflater = true;       this.encoding=encoding;    }

推薦:java基礎教程

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
蜜臀久久99精品久久久酒店新书 | www日韩在线观看| 久操手机在线视频| 国产大尺度在线观看| 特级毛片在线免费观看| 亚洲 欧洲 日韩| www.欧美黄色| 欧美在线观看www| 国产亚洲精品网站| 国产高清视频网站| 爱豆国产剧免费观看大全剧苏畅 | 国内外成人激情视频| 成熟了的熟妇毛茸茸| 37pao成人国产永久免费视频| 国产99久久九九精品无码| 国产美女三级视频| 五月天视频在线观看| 99精品一级欧美片免费播放| 国产日韩亚洲欧美在线| 国产a级片免费观看| 亚洲涩涩在线观看| 日韩伦理在线免费观看| 中文字幕天天干| 国产美女作爱全过程免费视频| 男女视频网站在线观看| www.这里只有精品| 久久久久99精品成人片| 欧美性猛交久久久乱大交小说 | 丰满人妻一区二区三区53号| 凹凸国产熟女精品视频| 污片在线免费看| 奇米影视亚洲色图| 国产又粗又长又爽又黄的视频| 国产黄色片免费在线观看| 高清av免费看| 欧美成人一区二区在线观看| 亚洲精品综合在线观看| 人妻精品无码一区二区三区| 视频一区二区视频| 999精品网站| 亚洲美免无码中文字幕在线| 中文字幕 欧美日韩| 国产免费人做人爱午夜视频| 欧美中文字幕在线观看视频| 182午夜在线观看| 毛葺葺老太做受视频| 欧美在线一区视频| 欧美中文字幕在线观看视频 | 国产日韩欧美大片| 香蕉视频999| 黄色a级片免费| 女性女同性aⅴ免费观女性恋| 麻豆映画在线观看| 午夜探花在线观看| 亚洲国产欧美91| 日日噜噜噜夜夜爽爽| 国产福利在线免费| 性生活免费在线观看| 欧美伦理视频在线观看| 久草青青在线观看| 116极品美女午夜一级| 青青艹视频在线| 国产美女无遮挡网站| 欧美一区二区中文字幕| 男人日女人bb视频| 日本精品一区二区三区四区| 日韩av片在线看| 无人在线观看的免费高清视频| 久久无码高潮喷水| 日本久久久久久久久久久久| 91插插插插插插插插| 伊人免费视频二| 无码人妻精品一区二区蜜桃网站| 国产尤物av一区二区三区| 全黄性性激高免费视频| 黑森林福利视频导航| 欧美一级特黄a| 超碰成人在线免费观看| 国产精品无码免费专区午夜| 97干在线视频| 国产精品拍拍拍| 亚洲综合激情五月| 国产精品网站免费| 小明看看成人免费视频| 天堂av免费看| 国产精品97在线| 久久出品必属精品| 成人在线播放网址| 黄大色黄女片18第一次| www.男人天堂网| 99视频精品免费| 妞干网这里只有精品| 欧美色图另类小说| 超碰在线免费av| www国产精品内射老熟女| 中文字幕天天干| r级无码视频在线观看| 嫩草影院国产精品| 福利视频一二区| 性鲍视频在线观看| 熟妇人妻va精品中文字幕| 国产盗摄视频在线观看| 国产视频一区二区三区在线播放| 自拍偷拍视频在线| 99视频免费播放| 男人添女荫道口女人有什么感觉| 亚洲一级片免费| 99精品视频播放| 男人的天堂avav| 久久久成人精品一区二区三区 | 国内自拍在线观看| www.99riav| 色婷婷激情视频| 久久久国产欧美| 成年人视频网站免费观看| 91制片厂免费观看| 中文字幕丰满乱码| 污污网站免费看| 欧美aⅴ在线观看| 香港三级韩国三级日本三级| 欧美 日韩 国产精品| 亚洲高清视频免费| 色18美女社区| 亚洲男人天堂2021| 国产又粗又长又爽又黄的视频| 韩国日本在线视频| 午夜视频在线瓜伦| 午夜视频在线瓜伦| 青青青国产在线视频| 波多野结衣天堂| 日韩一级理论片| 九九热免费在线观看| 亚洲欧美天堂在线| 永久av免费在线观看| 小说区视频区图片区| 在线视频一二三区| 丝袜人妻一区二区三区| 日本中文字幕网址| 国产精品免费成人| 在线观看免费不卡av| 中文字幕亚洲影院| 樱空桃在线播放| 亚洲中文字幕无码av永久| 国产白丝袜美女久久久久| 无码人妻h动漫| www.se五月| 欧美精品在欧美一区二区| 国产午夜福利在线播放| 国产又大又黄又粗又爽| www.久久久久久久久久久| 欧美在线观看黄| 日本www在线播放| www.久久av.com| 日韩欧美不卡在线| 天堂在线资源视频| 午夜影院免费版| 丰满人妻中伦妇伦精品app| www.com操| heyzo亚洲| 少妇高潮流白浆| 免费激情视频在线观看| 视频一区二区视频| 欧美伦理片在线看| 国产在线视频综合| 亚洲这里只有精品| 青青青免费在线| 欧美 日韩 国产 在线观看| 国产成人黄色片| 黄色污污在线观看| 三上悠亚在线一区二区| 岛国大片在线播放| 国产91av视频在线观看| 欧美精品无码一区二区三区| 五月天激情图片| 久国产精品视频| 五月婷婷狠狠操| 大肉大捧一进一出好爽视频| 国产成年人在线观看| 欧美婷婷精品激情| 精品国产免费av| 无码专区aaaaaa免费视频| 老司机av福利| 不卡中文字幕在线| 在线观看免费不卡av| 亚洲成色www.777999| 欧在线一二三四区| 欧美精品一区免费| 久久人人爽人人爽人人av| 一本色道久久88亚洲精品综合| 2025韩国理伦片在线观看| 女人另类性混交zo| 欧美色图另类小说| 黄色免费视频大全| 内射国产内射夫妻免费频道| 免费看日本黄色| 白白操在线视频| r级无码视频在线观看| 妞干网在线视频观看| 黄色国产一级视频| 精品久久久久久久免费人妻|