java如何利用NIO壓縮文件或文件夾
java利用NIO壓縮文件或文件夾
package liu.cn.ixj.util; import java.io.*; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class CompressUtils { private static ZipOutputStream zipOutputStream=null; private static ByteBuffer byteBuffer = ByteBuffer.allocate(1024); public static void main(String[] args) { try { zipOutputStream=new ZipOutputStream(new FileOutputStream(new File("E://aa.zip"))); toZip(new File("E:\\MyDownloads")); zipOutputStream.flush(); zipOutputStream.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void toZip(File file){ if (file.isFile()){ try { zipOutputStream.putNextEntry(new ZipEntry(file.getAbsolutePath().substring(3,file.getAbsolutePath().length()))); FileChannel channel = new FileInputStream(file).getChannel(); while (true){ byteBuffer.clear(); int read = channel.read(byteBuffer); if (read==-1)break;; zipOutputStream.write(byteBuffer.array()); } channel.close(); zipOutputStream.closeEntry(); } catch (IOException e) { e.printStackTrace(); } }else { File[] files = file.listFiles(); if (files==null||files.length==0){ try { zipOutputStream.putNextEntry(new ZipEntry(file.getAbsolutePath().substring(3,file.getAbsolutePath().length())+"/")); zipOutputStream.closeEntry(); } catch (IOException e) { e.printStackTrace(); } }else { for (File file2:files) { toZip(file2); } } } } }
java.io包和java.nio包
Java中I/O相關(guān)的兩個包是java.io和java.nio,它們的最重要的區(qū)別就是java.io里面的類是面向流的(stream oriented),java.nio里面的類是面向緩存的(buffer oriented)。
面向流意味著一次讀取一個或者一些字節(jié),然后處理這些字節(jié),在讀取和處理這些字節(jié)時當(dāng)前線程是阻塞的,不能干其他事情。
面向緩存意味著把一些字節(jié)讀到緩存里面,選擇了讀取的字節(jié)之后當(dāng)前線程可以去做其他事情,以后再去處理緩存里面的字節(jié)也可以,也就是線程非阻塞。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java?事務(wù)注解@Transactional回滾(try?catch、嵌套)問題
這篇文章主要介紹了Java?@Transactional回滾(try?catch、嵌套)問題,Spring?事務(wù)注解?@Transactional?本來可以保證原子性,如果事務(wù)內(nèi)有報錯的話,整個事務(wù)可以保證回滾,但是加上try?catch或者事務(wù)嵌套,可能會導(dǎo)致事務(wù)回滾失敗2022-08-08gateway網(wǎng)關(guān)與前端請求跨域問題的解決方案
這篇文章主要介紹了gateway網(wǎng)關(guān)與前端請求跨域問題的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07服務(wù)性能優(yōu)化之mybatis-plus開啟與關(guān)閉SQL日志打印方法
這篇文章主要介紹了在Mybatis-plus中開啟和關(guān)閉控制臺SQL日志打印,在`application.properties`文件中,可以通過配置來實現(xiàn)SQL日志的開啟和關(guān)閉,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12通過Feign進(jìn)行調(diào)用@FeignClient?找不到的解決方案
這篇文章主要介紹了通過Feign進(jìn)行調(diào)用@FeignClient?找不到的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03