java文件压缩与解压缩

文件压缩与解压缩

在Java中,文件的压缩与解压缩,主要依赖三个类来完成,ZipInputStream、ZipOutputStream、ZipEntry

import java.io.*;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/**

 \* <p> 压缩与解压缩。</p>

 \* 2022/2/17

 */
public class ZipDemo {
     public static void main(String[] args) throws IOException {
         //目标文件
         File destFile = new File("D:\\myFile.zip\\");
         ZipDemo zipDemo = new ZipDemo();
         //压缩文件
         //List<File> list = new ArrayList<>();
         //list.add(new File("d:\\1.txt"));
         //list.add(new File("d:\\2.txt"));
         //zipDemo.zip(list, destFile);
         //解压缩文件
         zipDemo.unzip(destFile, new File("d:\\myunzip"));
     }
     /**
      \* 压缩文件方法
      \* @param fileList 需要压缩的文件列表
      \* @param destFile 目标文件
      \* @throws IOException 异常信息
      */
     public void zip(List<File> fileList, File destFile) throws IOException {
         if (fileList == null || fileList.isEmpty()) {
             return;
         }
         //zip输出流对象
         ZipOutputStream zipOutputStream = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(destFile)));
         //设置压缩等级,level (0-9)
         zipOutputStream.setLevel(5);
         //遍历文件列表
         for (File file : fileList) {
             //zip文件条目对象
             ZipEntry zipEntry = new ZipEntry(file.getName());
             //将文件条目对象放入zip流中
             zipOutputStream.putNextEntry(zipEntry);
             //将文件信息写入zip流中
             FileInputStream fileInputStream = new FileInputStream(file);
             byte[] bytes = new byte[1024];
             int len = 0;
             while ((len = fileInputStream.read(bytes)) != -1) {
                 zipOutputStream.write(bytes, 0, len);
             }
             zipOutputStream.closeEntry();
             fileInputStream.close();
         }
         zipOutputStream.close();
     }
     /**
      \* 解压缩zip文件
      \* @param zipFile  待解压的文件
      \* @param destFile 解压到哪个目录
      */
     public void unzip(File zipFile, File destFile) {
         //目标文件必须是一个目录
         if (destFile.isFile()) {
             return;
         }
         //文件夹不存在要先创建文件夹
         if (!destFile.exists()) {
             destFile.mkdirs();
         }
         //创建一个zip读取流,在try中直接写会自动关闭流对象,无需手动关闭
         try (ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFile)))) {
             ZipEntry zipEntry;
             //遍历读取文件条目,读取下一个 ZIP文件条目并将流定位在条目数据的开头。
             while ((zipEntry = zipInputStream.getNextEntry()) != null) {
                 String name = zipEntry.getName();
                 //构建一个新文件对象,创建在destFile目录下
                 File f = new File(destFile, name);
                 //将文件条目数据写入到新的文件对象中,
                 FileOutputStream fileOutputStream = new FileOutputStream(f, false);
                 byte[] bytes = new byte[1024];
                 int len = 0;
                 while ((len = zipInputStream.read(bytes)) != -1) {
                     fileOutputStream.write(bytes, 0, len);
                 }
                 zipInputStream.closeEntry();
                 fileOutputStream.close();
             }
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,MultipartFile是Spring Framework中用于处理文件上传的接口。它提供了一些方法来操作上传的文件。然而,MultipartFile并没有直接提供解压缩文件的方法。 要解压缩MultipartFile文件,你需要将其转换为普通的Java IO文件类型,然后使用解压缩库来处理文件解压缩的操作。在你的引用中,你提到了一个私有方法 `unzip(MultipartFile file)` ,它使用MultipartFile文件进行解压缩操作。我假设这个方法中的逻辑是正确的。 为了实现解压缩MultipartFile文件的操作,你需要完成以下步骤: 1. 将MultipartFile文件转换为普通的Java IO文件类型。这可以通过创建一个临时文件并将MultipartFile的内容写入该文件来实现。你可以使用`file.transferTo()`方法将MultipartFile的内容写入Java IO文件。 2. 调用`unzip()`方法,将Java IO文件作为参数进行解压缩操作。该方法应该返回解压后的文件。 3. 将解压后的文件再次转换为MultipartFile类型,以便进一步处理或上传。 但是,请注意,将解压后的文件转换回MultipartFile类型并不是一个标准的操作。因为MultipartFile是Spring Framework中特定于文件上传的接口,它通常与文件上传相关的逻辑紧密结合。所以,如果你需要将解压后的文件再次转换为MultipartFile类型,你可能需要自定义一些逻辑来创建一个包含解压文件内容的MultipartFile对象。 综上所述,要在Java解压缩MultipartFile文件,你需要将MultipartFile转换为Java IO文件,然后使用解压缩库对该文件进行解压缩操作。如果需要将解压后的文件再次转换为MultipartFile类型,你可能需要自定义一些逻辑来创建相应的MultipartFile对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值