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(); } }
相關文章
- 使用java API進行zip遞迴壓縮資料夾以及解壓JavaAPI遞迴
- Android遞迴刪除資料夾下所有檔案Android遞迴
- asp.net 遞迴刪除資料夾及其子資料夾和所有檔案[轉]ASP.NET遞迴
- 使用Java API進行tar.gz檔案及資料夾壓縮解壓縮JavaAPI
- 遞迴修改資料夾下面所有檔案裡面的的abc為abcde遞迴
- 工作經驗: linux 壓縮當前資料夾下所有檔案Linux
- java實現zip壓縮檔案/資料夾Java
- java 壓縮(解壓)檔案或者資料夾工具類Java
- 獲取資料夾及其子資料夾下的所有檔案
- nodejs遞迴資料夾獲取所有檔案路徑NodeJS遞迴
- Java實現解壓縮檔案和資料夾Java
- 遞迴遍歷磁碟下的某一資料夾中所有檔案,並copy檔案生成檔案和帶資料夾的檔案遞迴
- C++讀取某個資料夾下面的子資料夾及其所有檔案C++
- Linux加密壓縮檔案/資料夾Linux加密
- Java遞迴遍歷資料夾及檔案過濾器使用(FileFilter)Java遞迴過濾器Filter
- python 如何刪除資料夾下的所有檔案和子資料夾?Python
- 使用os.walk提取壓縮檔案並避免遞迴提取遞迴
- Java實現壓縮資料夾Java
- Java 資料夾遞迴遍歷Java遞迴
- Java多執行緒-執行緒池的使用Java執行緒
- 查詢某資料夾下所有子資料夾內的py檔案-3一行程式碼搞定行程
- linux 下壓縮與解壓資料夾Linux
- JAVA執行緒池的使用Java執行緒
- Java執行緒池二:執行緒池原理Java執行緒
- (MFC)子執行緒的資料如何傳遞給主執行緒中?執行緒
- Java多執行緒——執行緒池Java執行緒
- Java檔案壓縮Java
- java 檔案壓縮Java
- Java執行緒池使用說明Java執行緒
- Java 執行緒內 遞迴 Bug 一例Java執行緒遞迴
- Java執行緒池Java執行緒
- java 執行緒池Java執行緒
- c# 上傳壓縮包 解壓,遍歷資料夾和檔案C#
- matlab遍歷資料夾下的所有檔案Matlab
- 詳解執行緒池的作用及Java中如何使用執行緒池執行緒Java
- springboot配置執行緒池使用多執行緒插入資料Spring Boot執行緒
- java執行緒池趣味事:這不是執行緒池Java執行緒
- java多執行緒9:執行緒池Java執行緒