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遞迴
- 遞迴修改資料夾下面所有檔案裡面的的abc為abcde遞迴
- 使用Java API進行tar.gz檔案及資料夾壓縮解壓縮JavaAPI
- 工作經驗: linux 壓縮當前資料夾下所有檔案Linux
- 使用libzip壓縮檔案和資料夾
- nodejs遞迴資料夾獲取所有檔案路徑NodeJS遞迴
- java 壓縮(解壓)檔案或者資料夾工具類Java
- Java實現解壓縮檔案和資料夾Java
- Linux加密壓縮檔案/資料夾Linux加密
- C++讀取某個資料夾下面的子資料夾及其所有檔案C++
- python 如何刪除資料夾下的所有檔案和子資料夾?Python
- Java遞迴遍歷資料夾及檔案過濾器使用(FileFilter)Java遞迴過濾器Filter
- 批處理指令碼:遞迴移動資料夾內所有檔案指令碼遞迴
- 使用os.walk提取壓縮檔案並避免遞迴提取遞迴
- Java實現壓縮資料夾Java
- linux 下壓縮與解壓資料夾Linux
- Java多執行緒-執行緒池的使用Java執行緒
- 查詢某資料夾下所有子資料夾內的py檔案-3一行程式碼搞定行程
- JAVA執行緒池的使用Java執行緒
- Java 執行緒池獲取池中所有執行緒列表的方法Java執行緒
- matlab遍歷資料夾下的所有檔案Matlab
- springboot配置執行緒池使用多執行緒插入資料Spring Boot執行緒
- Java執行緒池二:執行緒池原理Java執行緒
- (MFC)子執行緒的資料如何傳遞給主執行緒中?執行緒
- Java執行緒池使用說明Java執行緒
- Linux中Bin檔案壓縮包解壓執行Linux
- c# 上傳壓縮包 解壓,遍歷資料夾和檔案C#
- java 執行緒池Java執行緒
- Java執行緒池Java執行緒
- 詳解執行緒池的作用及Java中如何使用執行緒池執行緒Java
- java執行緒池趣味事:這不是執行緒池Java執行緒
- java多執行緒9:執行緒池Java執行緒
- 初級:如何在 Linux 中 zip 壓縮檔案和資料夾Linux
- Java併發 之 執行緒池系列 (2) 使用ThreadPoolExecutor構造執行緒池Java執行緒thread
- Java執行緒池的使用和原理Java執行緒
- JAVA執行緒池的原理及使用Java執行緒
- Java執行緒池瞭解一下Java執行緒
- 搞懂Java執行緒池Java執行緒
- 【Java】【多執行緒】執行緒池簡述Java執行緒