java如何利用NIO压缩文件或文件夹
更新时间:2023年12月27日 14:41:00 作者:刘瑾言
这篇文章主要介绍了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相关的两个包是java.io和java.nio,它们的最重要的区别就是java.io里面的类是面向流的(stream oriented),java.nio里面的类是面向缓存的(buffer oriented)。
面向流意味着一次读取一个或者一些字节,然后处理这些字节,在读取和处理这些字节时当前线程是阻塞的,不能干其他事情。
面向缓存意味着把一些字节读到缓存里面,选择了读取的字节之后当前线程可以去做其他事情,以后再去处理缓存里面的字节也可以,也就是线程非阻塞。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java 事务注解@Transactional回滚(try catch、嵌套)问题
这篇文章主要介绍了Java @Transactional回滚(try catch、嵌套)问题,Spring 事务注解 @Transactional 本来可以保证原子性,如果事务内有报错的话,整个事务可以保证回滚,但是加上try catch或者事务嵌套,可能会导致事务回滚失败2022-08-08
服务性能优化之mybatis-plus开启与关闭SQL日志打印方法
这篇文章主要介绍了在Mybatis-plus中开启和关闭控制台SQL日志打印,在`application.properties`文件中,可以通过配置来实现SQL日志的开启和关闭,文中通过代码介绍的非常详细,需要的朋友可以参考下2024-12-12
通过Feign进行调用@FeignClient 找不到的解决方案
这篇文章主要介绍了通过Feign进行调用@FeignClient 找不到的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-03-03


最新评论