当前位置: 首页 > 科技观察

Java使用线程池递归压缩文件夹下所有子文件

时间:2023-03-13 05:48:20 科技观察

本文将介绍Java中如何使用线程池递归压缩文件夹下所有子文件。具体方法如下:Gzip单文件压缩对单个文件使用GZip压缩。packagedate0805.demo1;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.io.OutputStream;importjava.util。zip.GZIPOutputStream;publicclassGZipRunnableimplementsRunnable{privatefinalFilefile;publicGZipRunnable(Filefile){this.file=file;}@Overridepublicvoidrun(){if(!file.getName().endsWith(".gz")){FileoutputFile=newFile(file.getParent(),file.getName()+".gz");if(!outputFile.exists()){CountTimecountTime=newCountTime(file);Threadt=newThread(countTime);t.start();try(InputStreamin=newBufferedInputStream(newFileInputStream(file));OutputStreamout=newBufferedOutputStream(newGZIPOutputStream(newFileOutputStream(outputFile)));){intb;while((b=in.read())!=-1)out.write(b);out.flush();}catch(Exceptionex){ex.printStackTrace();}t.interrupt();}else{System.out.println(outputFile+"文件已经存在,无法压缩!");}}}}创建线路程序池进行递归压缩实现一个文件夹下所有子文件的压缩,首先递归查找所有子文件,然后调用压缩线程进行压缩packagedate0805.demo1;importjava.io.File;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassGZipFiles{privatefinalstaticintTHREAD_COUNT=4;privatestaticExecutorServiceservice=Executors.newFixedThreadPool(THREAD_COUNT);publicstaticvoidGZip(Argfiles){sif(.isDirectory()){GZipRunnablegZipRunnable=newGZipRunnable(fileArgs);service.submit(gZipRunnable);}else{File[]files=fileArgs.listFiles();for(Filef:files){GZip(f);}}}publicstaticvoidshutdown(){service.shutdown();}}压缩提示packagedate0805.demo1;importjava.io.File;publicclassCountTimeimplementsRunnable{privateFilefile;publicCountTime(Filefile){super();this.file=file;}@Overridepublicvoidrun(){System.out.println("正压缩"+file.getAbsolutePath());try{while(true){System.out.print(".");Thread.sleep(1000);}}catch(InterruptedExceptione){System.out.println();System.out.println(file.getAbsolutePath()+".gz已压缩完成!");}}}测试代码packagedate0805.demo1;importjava.io.File;publicclassTest{publicstaticvoidmain(String[]args){Filefile=newFile("D://newfolder");GZipFiles.GZip(file);GZipFiles.shutdown();}}