Discuss / Java / 放错地方,再放一次哈哈

放错地方,再放一次哈哈

Topic source
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;
	}
}


  • 1

Reply