package com.itranswarp.learnjava; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Path; import java.nio.file.Paths; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; /** * Learn Java from https://www.liaoxuefeng.com/ * * @author liaoxuefeng */ public class ZipFile { public static void main(String[] args) throws IOException { String source = "./src/hello.zip"; // 读取zip文件内容 try (ZipInputStream zip = new ZipInputStream(new FileInputStream(source))) { ZipEntry entry = null; // 在创建ByteArrayOutputStream类实例时,内存中会创建一个byte数组类型的缓冲区,缓冲区会随着数据的不断写入而自动增长 ByteArrayOutputStream data = new ByteArrayOutputStream(); while ((entry = zip.getNextEntry()) != null) { // null zip结束, 解压 压缩包中的每个文件 System.out.println("文件名: " + entry.toString() + "\n\n"); System.out.println("内容: ----------------------------------"); if (!entry.isDirectory()) { int n; while ((n = zip.read()) != -1) { System.out.println((char) n); data.write(n); } } } System.out.print(new String(data.toByteArray(), "UTF-8")); } // 把文件压缩到zip包中去 - 写入 try (ZipOutputStream zip2 = new ZipOutputStream(new FileOutputStream(source))) { // 新建一个写入的文件 String wpath = "./src/newhello.txt"; try (OutputStream wfile = new FileOutputStream(wpath)) { wfile.write("写入压缩包文件0 NAME LUCK JOB TEST".getBytes("UTF-8")); } // 写入压缩包 File f = new File(wpath); zip2.putNextEntry(new ZipEntry(f.getName())); // 指定要放入的文件名 zip2.write(getFileDataAsBytes(f)); // 写入该文件的子字节流, 直接把以前的压缩文件内容干掉了 zip2.closeEntry(); // 关闭文档 ,try(...) 只处理了file.close() } } private static byte[] getFileDataAsBytes(File f) throws FileNotFoundException, IOException { // TODO Auto-generated method stub byte[] data; try (InputStream input = new FileInputStream(f); ByteArrayOutputStream out = new ByteArrayOutputStream()) { int n; while ((n = input.read()) != -1) { out.write(n); } data = out.toByteArray(); } return data; } }
Sign in to make a reply
用户7570525982