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)的兩個(gè)包是java.io和java.nio,它們的最重要的區(qū)別就是java.io里面的類是面向流的(stream oriented),java.nio里面的類是面向緩存的(buffer oriented)。
面向流意味著一次讀取一個(gè)或者一些字節(jié),然后處理這些字節(jié),在讀取和處理這些字節(jié)時(shí)當(dāng)前線程是阻塞的,不能干其他事情。
面向緩存意味著把一些字節(jié)讀到緩存里面,選擇了讀取的字節(jié)之后當(dāng)前線程可以去做其他事情,以后再去處理緩存里面的字節(jié)也可以,也就是線程非阻塞。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用React和Java實(shí)現(xiàn)文本摘要小工具
本文將詳細(xì)介紹如何使用 React 和 Java 搭建一個(gè)小型文本摘要工具,并基于 Hugging Face 提供的 API 來(lái)實(shí)現(xiàn)智能摘要功能,感興趣的可以了解下2024-11-11Java?事務(wù)注解@Transactional回滾(try?catch、嵌套)問(wèn)題
這篇文章主要介紹了Java?@Transactional回滾(try?catch、嵌套)問(wèn)題,Spring?事務(wù)注解?@Transactional?本來(lái)可以保證原子性,如果事務(wù)內(nèi)有報(bào)錯(cuò)的話,整個(gè)事務(wù)可以保證回滾,但是加上try?catch或者事務(wù)嵌套,可能會(huì)導(dǎo)致事務(wù)回滾失敗2022-08-08Idea配置Maven阿里云鏡像加速的實(shí)現(xiàn)
這篇文章主要介紹了Idea配置Maven阿里云鏡像加速的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04gateway網(wǎng)關(guān)與前端請(qǐng)求跨域問(wèn)題的解決方案
這篇文章主要介紹了gateway網(wǎng)關(guān)與前端請(qǐng)求跨域問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07服務(wù)性能優(yōu)化之mybatis-plus開啟與關(guān)閉SQL日志打印方法
這篇文章主要介紹了在Mybatis-plus中開啟和關(guān)閉控制臺(tái)SQL日志打印,在`application.properties`文件中,可以通過(guò)配置來(lái)實(shí)現(xiàn)SQL日志的開啟和關(guān)閉,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12java實(shí)現(xiàn)波雷費(fèi)密碼算法示例代碼
這篇文章主要介紹了java實(shí)現(xiàn)波雷費(fèi)密碼算法示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01通過(guò)Feign進(jìn)行調(diào)用@FeignClient?找不到的解決方案
這篇文章主要介紹了通過(guò)Feign進(jìn)行調(diào)用@FeignClient?找不到的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03