java 写入写出 zip

package com.su.test.aaaTest.ioTest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**

  • 将文件压缩到 zip 中
    */
    public class ZipExample2 {
    public static void main(String[] args) {
    File[] files = new File[2];
    files[0] = new File(“E:\ideaTest\zip\file1.txt”);
    files[1] = new File(“E:\ideaTest\zip\file2.txt”);
    // File[] files2 = {
    // new File(“E:\ideaTest\zip\file1.txt”),
    // new File(“E:\ideaTest\zip\file2.txt”)
    // };
    String targetPath = “E:\ideaTest\zip\example2.zip”;
    writeToZip(files,targetPath);
    }

    public static void writeToZip(File[] files, String targetPath){
    try {
    // 创建一个ZipOutputStream对象,用于将文件写入zip文件
    FileOutputStream fos = new FileOutputStream(targetPath);
    ZipOutputStream zos = new ZipOutputStream(fos);

         for(int i = 0; i < files.length; i++){
             byte[] buffer = new byte[1024];
             int len;
             // 添加文件到zip文件中
             ZipEntry zipEntry1 = new ZipEntry(files[i].getName());
             zos.putNextEntry(zipEntry1);
             // 将文件内容写入zip文件
             FileInputStream fis1 = new FileInputStream(files[i]);
             while ((len = fis1.read(buffer)) > 0) {
                 zos.write(buffer, 0, len);
             }
         }
    
         // 关闭zip文件
         zos.closeEntry();
         zos.close();
         fos.close();
     } catch (IOException e) {
         e.printStackTrace();
     }
    

    }

}

package com.su.test.aaaTest.ioTest;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

/**

  • 从 zip 文件中读取文件
    */
    public class ZipExampleRead2 {
    public static void main(String[] args) {
    String sourcePath = “E:\ideaTest\zip\example.zip”;
    readFromZip(sourcePath);
    }

    public static void readFromZip(String sourcePath){
    try {
    // 读取zip文件中的文件
    FileInputStream fis = new FileInputStream(sourcePath);
    ZipInputStream zis = new ZipInputStream(fis);
    ZipEntry zipEntry = zis.getNextEntry();

         StringBuffer buff = new StringBuffer();
         BufferedReader br = new BufferedReader(new InputStreamReader(zis));
         while (zipEntry != null) {
             System.out.println("FileName: " + zipEntry.getName());
             System.out.println("FileSize: " + zipEntry.getSize());
             //                System.out.println("LastModified: " + zipEntry.getLastModifiedDate());
             System.out.println("LastModified: " + zipEntry.getLastModifiedTime());
    
             // 读取文件内容
             String line;
             while ((line = br.readLine()) != null){
                 System.out.println("--line:"+line);
                 buff.append(line + "\r\n");
             }
    
             // 关闭当前文件
             zis.closeEntry();
             zipEntry = zis.getNextEntry();  // 防止无限循环
         }
         System.out.println("buff:\n"+buff);
         zis.close();
         fis.close();
     } catch (IOException e) {
         e.printStackTrace();
     }
    

    }
    /**

    • FileName: file1.txt
    • FileSize: -1
    • LastModified: 2024-02-20T14:03:06Z
    • –line:哦哦呀呀呀呀呀呀呀呀呀呀呀呀---------------------哦哦
    • –line:hhhhhhhhhhhhhhhhhhhhhhhhhh
    • FileName: file2.txt
    • FileSize: -1
    • LastModified: 2024-02-20T14:03:06Z
    • –line:lllllllllllllllllllllllllllllll
    • –line:哈哈哈
    • buff:
    • 哦哦呀呀呀呀呀呀呀呀呀呀呀呀---------------------哦哦
    • hhhhhhhhhhhhhhhhhhhhhhhhhh
    • lllllllllllllllllllllllllllllll
    • 哈哈哈哈哈

    */

}

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下代码来解压缩zip文件:import java.io.*; import java.util.zip.*; public class Unzip { public static void unzip(String zipFilePath, String destDir) { File dir = new File(destDir); // 如果目标目录不存在,则创建 if (!dir.exists()) { dir.mkdirs(); } // 获取 zip 文件的输入流 FileInputStream fis; try { fis = new FileInputStream(zipFilePath); // 从流中获取 zip 文件 ZipInputStream zis = new ZipInputStream(fis); // 读取一个进入点 ZipEntry ze = zis.getNextEntry(); // 使用 while 循环遍历所有的进入点 while (ze != null) { // 如果是一个目录,则创建 if (ze.isDirectory()) { File f = new File(destDir + "/" + ze.getName()); f.mkdirs(); } else { // 否则读取文件内容 FileOutputStream fos = new FileOutputStream(destDir + "/" + ze.getName()); int len; byte[] buffer = new byte[2048]; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); } // 关闭文件输出流 fos.close(); } // 读取下一个进入点 ze = zis.getNextEntry(); } // 关闭 ZipInputStream zis.closeEntry(); zis.close(); // 关闭文件输入流 fis.close(); } catch (IOException e) { e.printStackTrace(); } } } ### 回答2: 以下是一个使用Java来解压zip文件的示例代码,支持Windows和Mac系统的zip压缩包: ```java import java.io.*; import java.nio.file.*; import java.util.zip.*; public class ZipExtractor { public static void main(String[] args) { String zipFilePath = "path/to/zip/file.zip"; String destDir = "path/to/destination/folder"; try { unzip(zipFilePath, destDir); System.out.println("解压成功!"); } catch (IOException e) { System.out.println("解压失败:" + e.getMessage()); } } public static void unzip(String zipFilePath, String destDir) throws IOException { try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFilePath))) { ZipEntry entry = zipInputStream.getNextEntry(); while (entry != null) { String filePath = destDir + File.separator + entry.getName(); if (!entry.isDirectory()) { extractFile(zipInputStream, filePath); } else { Files.createDirectories(Paths.get(filePath)); } zipInputStream.closeEntry(); entry = zipInputStream.getNextEntry(); } } } private static void extractFile(ZipInputStream zipInputStream, String filePath) throws IOException { try (BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(filePath))) { byte[] buffer = new byte[1024]; int length; while ((length = zipInputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } } } } ``` 在上述代码中,使用Java的`ZipInputStream`类来逐个解压zip文件中的条目(文件或文件夹)。在解压时,根据条目的类型,可以选择创建文件夹或提取文件。同时,使用`BufferedOutputStream`来将文件内容写入到指定路径。 为了适应不同操作系统的路径分隔符,我们使用`File.separator`来创建合适的文件路径。此外,`Files.createDirectories()`方法用于在文件路径中创建文件夹。 要使用该代码,您需要将`zipFilePath`和`destDir`变量替换为实际的zip文件路径和目标文件夹路径。然后,调用`unzip()`方法来执行解压操作。 请注意,解压操作可能涉及到大量的文件和数据,因此建议在处理大型zip文件时使用适当的缓冲区大小。在上述代码中,我们使用了每次读取1024字节的缓冲区。如果需要,您可以根据需要进行调整。 ### 回答3: 在Java中,我们可以使用java.util.zip包来解压.zip压缩包。以下是一个支持Windows和Mac系统的zip解压缩的Java代码示例: ```java import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; public class ZipExtractor { public static void main(String[] args) { String zipFilePath = "path/to/your/zipfile.zip"; String destDirectory = "path/to/your/destination/directory"; unzip(zipFilePath, destDirectory); } public static void unzip(String zipFilePath, String destDirectory) { File destDir = new File(destDirectory); if (!destDir.exists()) { destDir.mkdir(); } try (ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath))) { ZipEntry entry = zipIn.getNextEntry(); while (entry != null) { String filePath = destDirectory + File.separator + entry.getName(); if(!entry.isDirectory()) { extractFile(zipIn, filePath); } else { File dir = new File(filePath); dir.mkdir(); } zipIn.closeEntry(); entry = zipIn.getNextEntry(); } System.out.println("Successfully extracted zip file."); } catch (IOException e) { e.printStackTrace(); } } private static void extractFile(ZipInputStream zipIn, String filePath) throws IOException { try (FileOutputStream fos = new FileOutputStream(filePath)) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = zipIn.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } } } } ``` 在上面的代码中,请将`zipFilePath`替换为要解压缩的.zip文件的实际路径,`destDirectory`替换为要解压到的目标目录的实际路径。然后,运行`unzip`方法即可将.zip文件解压缩到目标目录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值