亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java使用線程池遞歸壓縮文件夾下面的所有子文件

標簽:
Java

原文链接

本文将介绍Java中利用线程池递归的方式压缩文件夹下面的所有子文件,具体方法如下:

Gzip单个文件压缩

对于单个文件使用GZip压缩。

package date0805.demo1;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.zip.GZIPOutputStream;public class GZipRunnable implements Runnable {	private final File file;	public GZipRunnable(File file) {		this.file=file;
	}	@Override
	public void run() {		if(!file.getName().endsWith(".gz")) {
			File outputFile=new File(file.getParent(),file.getName()+".gz");			if(!outputFile.exists()) {
				CountTime countTime = new CountTime(file);
				Thread t=new Thread(countTime);
				t.start();				try(
					InputStream in =new BufferedInputStream(new FileInputStream(file));
					OutputStream out=new BufferedOutputStream(new GZIPOutputStream(new FileOutputStream(outputFile)));
				) {					int b;					while((b=in.read())!=-1)
						out.write(b);
					out.flush();
				} catch(Exception ex) {
					ex.printStackTrace();
				}
				t.interrupt();
			} else {
				System.out.println(outputFile+"文件已经存在,无法压缩!");
			}
		}
	}
}

创建线程池进行递归压缩

要实现对一个文件夹下面的所有的子文件进行压缩,首先递归找出所有子文件,然后调用压缩线程进行压缩。

package date0805.demo1;import java.io.File;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class GZipFiles {	private final static int THREAD_COUNT=4;	private static ExecutorService service=Executors.newFixedThreadPool(THREAD_COUNT);	public static void GZip(File fileArgs) {		if(!fileArgs.isDirectory()) {
			GZipRunnable gZipRunnable = new GZipRunnable(fileArgs);
			service.submit(gZipRunnable);
		}		else {
			File[] files = fileArgs.listFiles();			for(File f:files) {
				GZip(f);
			}
		}
	}	public static void shutdown() {
		service.shutdown();
	}
}

压缩提示

package date0805.demo1;import java.io.File;public class CountTime implements Runnable {	private File file;	public CountTime(File file) {		super();		this.file = file;
	}	@Override
	public void run() {
		System.out.println("正在压缩"+file.getAbsolutePath());		try {			while(true) {
				System.out.print(".");
				Thread.sleep(1000);
			}
		}catch (InterruptedException e) {
			System.out.println();
			System.out.println(file.getAbsolutePath()+".gz已经压缩完成!");
		}
	}

}

测试代码

package date0805.demo1;import java.io.File;public class Test {	public static void main(String[] args) {
		File file=new File("D://新建文件夹");
		GZipFiles.GZip(file);
		GZipFiles.shutdown();
	}
}


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消