为了账号安全,请及时绑定邮箱和手机立即绑定

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下载
官方微信

举报

0/150
提交
取消