亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

【I/O流】壓縮一個文件夾,包括文件夾下的所有

系統 1696 0

/**
?* 利用zip庫壓縮/解壓文件夾
?* 因為java的基本zip庫是不支持中文文件名的。所以壓縮后中文名的條目都變成了亂碼,利用rar解壓工具解壓不了名字為亂碼的壓縮文件,但自己寫的解壓方法在windows下解壓后編碼正常顯示中文,而其他系統下則不能正常還原;

?


? * 可以用ant.jar包下的zip類來壓縮文件夾,apache tools下的zip庫是支持中文的。(ant.jar包下面可以下載)

? 第一種是沒處理中文亂碼的···

? * @author 小苗
?*/

? 第一種:

    import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;

    
      import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
    
    

/**
 * 壓縮一個目錄,包括目錄下的所有文件
 * java的基本zip庫是不支持中文文件名的。
 * 可以用ant.jar包下的zip類,apache tools下的zip庫是支持中文的。
 * @author 小苗
 */

public class CompressDir {
	/**
	 * 壓縮文件夾方法(此方法壓縮后有根目錄且名字與被壓縮文件夾名一樣,效果如圖1)
	 * @param inputFile 被壓縮的文件夾
	 * @param str    壓縮條目根目錄名
	 * @param zipFile  壓縮后的輸出流
	 * @throws IOException
	 */
	public void comDir2(File inputFile,String str,ZipOutputStream zipFile) throws IOException{
		//判斷文件是否為文件夾
		if(inputFile.isDirectory()){
		  File[] files = inputFile.listFiles();
		  zipFile.putNextEntry(new ZipEntry(str+"/"));  //使用指定名字創建壓縮條目
		  str = str.length()==0 ? "":str+"/";
		  for (int i=0;i<files.length;i++) {
			  comDir2(files[i],str+files[i].getName(), zipFile); //遞歸調用壓縮方法
		  }
		}else{
			InputStream in = new FileInputStream(inputFile);
			//開始寫入新的 ZIP 文件條目并將流定位到條目數據的開始處。
			ZipEntry zipname = new ZipEntry(str);
			zipFile.putNextEntry(zipname);  
			byte[] buff = new byte[1024];
			int len = 0;
			while((len = in.read(buff))!=-1){
				zipFile.write(buff, 0, len);
			}
			in.close();
		}
	}
	/**
	 * @param s3 被壓縮的文件夾
	 * @param s4 壓縮后輸出路徑
	 * @throws IOException
	 */
	public void comDir(File s3,File s4) throws IOException {
		System.out.println("正在壓縮文件···");
		//定義 Zip格式的輸出流
		ZipOutputStream zip_out = new ZipOutputStream(new FileOutputStream(s4));
		comDir2(s3,s3.getName(),zip_out);  //調用壓縮方法
		zip_out.close(); //關閉流
	}
	
	/**
	 * 解壓縮zip文件的方法
	 * @param zipFileName 要被解壓的文件
	 * @param outputDirectory  解壓輸出路徑
	 */
	public void unzip(String zipFileName, String outputDirectory) {
		System.out.println("正在解壓···");
		try {
			ZipInputStream in = new ZipInputStream(new FileInputStream(zipFileName));
			/*獲取ZipInputStream中的ZipEntry條目,一個zip文件中可能包含多個ZipEntry,
			 *當getNextEntry方法的返回值為null,則代表ZipInputStream中沒有下一個ZipEntry,
			 *輸入流讀取完成;
			 */
			ZipEntry z = in.getNextEntry();
			while (z != null) {
				System.out.println("unziping " + z.getName());
				//創建以zip包文件名為目錄名的根目錄
				File f = new File(outputDirectory);
				f.mkdirs();
				if (z.isDirectory()) {
					String name = z.getName();
					name = name.substring(0, name.length() - 1);
					f = new File(outputDirectory + File.separator + name);
					f.mkdirs();
				} else {
					f = new File(outputDirectory + File.separator + z.getName());
					f.createNewFile();
					FileOutputStream out = new FileOutputStream(f);
					byte[] buff = new byte[1024];
					int len ;
					while ((len = in.read(buff)) != -1) {
						out.write(buff,0,len);
					}
					out.close();
				}
				z = in.getNextEntry();   //讀取下一個ZipEntry
			}
			in.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) throws IOException {
		CompressDir com = new CompressDir();
		//壓縮
		com.comDir(new File("d:\\Temp"), new File("d:\\temp.zip"));
		System.out.println("壓縮完成!");
		//解壓 如果此處不指定解壓的具體目錄,如:test2,那么則直接解壓到根目錄下
		com.unzip("d:\\temp.zip", "d:\\");
		System.out.println("解壓完成!");
	}
}

  

??

第二種:

問題:①怎么解決中文名文件壓縮后為亂碼
?* java的基本zip庫是不支持中文文件名的。參考了網上的一些解決方法

?* 發現Ant的apache tools下的zip庫是支持中文的。
?* 下面就是采用該方式實現的在中文文件名下的文件壓縮代碼:
?? 在給出實現代碼之前,有一點需要指出,那就是必須要在工程中引Ant.jar的包,此包下面可以下載。

    import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

    
      import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream
    
    ;

/**
 * @author 小苗
 */
//此方法壓縮后 沒有根目錄,效果如圖2
public class CompressDir02 {
	public static File inpath = new File("d:\\Temp");
	public static ZipOutputStream zout = null; //輸出流確定
	static {
		try {
			zout = new ZipOutputStream(new FileOutputStream("d:\\temp.zip"));
//			zout.setEncoding("GBK");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}

	public void dozip(File file) {
		File[] files = file.listFiles();
		for (File f : files) {
			if (f.isFile()) {
				docopy(f);
			} else 
				dozip(f);
		}
	}

	public void docopy(File f) {
		try {
			InputStream in = new FileInputStream(f);
			//創建壓縮條目
			String tempPath = f.getAbsolutePath().replace(
					inpath.getAbsolutePath() + "\\", "");
			ZipEntry zent = new ZipEntry(tempPath);
			System.out.println("壓縮條目:"+tempPath);
			zout.putNextEntry(zent);
			byte[] buff = new byte[1024];
			int len = 0;
			while ((len = in.read(buff)) != -1) {
				zout.write(buff, 0, len);
			}
			in.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) throws IOException {
		CompressDir02 com = new CompressDir02();
		File ff = new File("d:\\Temp");
		System.out.println("開始壓縮文件···");
		com.dozip(ff);
		System.out.println("壓縮完成!");
		com.zout.close();
	}
}
  

??

?

?

圖1:

?

? 圖1 圖2 ?????? ??????????????????????????????????????????????????????????????? 圖2:

?

?

?

?

?

?

?

?

?

【I/O流】壓縮一個文件夾,包括文件夾下的所有文件、子文件夾;解壓文件方法;壓縮文件名為中文亂碼的處理


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久这里是精品 | 日本欧洲亚洲一区在线观看 | 亚洲日韩在线视频 | 亚洲人成绝费网站色ww | 国产高清在线精品一区二区三区 | 91网红福利精品区一区二 | 日本高清视频不卡 | 一级毛片不卡免费看老司机 | 中文字幕国产日韩 | 色婷婷在线观看视频 | 午夜久久久 | julia中文字幕在线 | 无毒不卡在线播放 | 精品福利在线观看 | 在线不卡日韩 | 久久99精品久久久久久国产越南 | 国产一级一国产一级毛片 | 久久的精品99精品66 | 四虎永久网站 | 色综合合久久天天给综看 | 亚洲综合精品成人 | 羞羞视频免费网站 | 日本一区二区三区在线 观看网站 | 4hu四虎免费影院www | 日日干日日摸 | 欧美理论片大全在线观看 | 欧美婷婷| 国产一及片 | 中文字幕在线精品视频入口一区 | 日韩在线 中文字幕 | 成年人色视频 | 欧美成人一区二区三区在线视频 | 高清一区二区 | 99久久免费精品视频 | 在线亚洲播放 | 亚洲综合色秘密影院秘密影院 | 欧美xxxxx性另类 | 国产乱码亚洲精品一区二区 | 日本黄色录象 | 亚洲国产精品免费视频 | 精品亚洲成a人在线观看 |