mirror of
				https://gitee.com/dromara/hutool.git
				synced 2025-10-31 16:36:56 +08:00 
			
		
		
		
	add method
This commit is contained in:
		| @@ -9,6 +9,7 @@ | ||||
|  | ||||
| ### 🐣新特性 | ||||
| * 【core   】     MapUtil增加entry、ofEntries方法 | ||||
| * 【core   】     ZipWriter增加add方法重载 | ||||
|  | ||||
| ### 🐞Bug修复 | ||||
| * 【core   】     IdcardUtil#getCityCodeByIdCard位数问题(issue#2224@Github) | ||||
|   | ||||
| @@ -6,6 +6,7 @@ import cn.hutool.core.io.IoUtil; | ||||
| import cn.hutool.core.io.resource.Resource; | ||||
| import cn.hutool.core.util.ArrayUtil; | ||||
| import cn.hutool.core.util.StrUtil; | ||||
| import cn.hutool.core.util.ZipUtil; | ||||
|  | ||||
| import java.io.Closeable; | ||||
| import java.io.File; | ||||
| @@ -66,7 +67,7 @@ public class ZipWriter implements Closeable { | ||||
| 	 * @param charset 编码 | ||||
| 	 */ | ||||
| 	public ZipWriter(OutputStream out, Charset charset) { | ||||
| 		this.out = getZipOutputStream(out, charset); | ||||
| 		this.out = ZipUtil.getZipOutputStream(out, charset); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @@ -176,6 +177,31 @@ public class ZipWriter implements Closeable { | ||||
| 		return putEntry(path, in); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * 对流中的数据加入到压缩文件<br> | ||||
| 	 * 路径列表和流列表长度必须一致 | ||||
| 	 * | ||||
| 	 * @param paths 流数据在压缩文件中的路径或文件名 | ||||
| 	 * @param ins   要压缩的源,添加完成后自动关闭流 | ||||
| 	 * @return 压缩文件 | ||||
| 	 * @throws IORuntimeException IO异常 | ||||
| 	 * @since 5.8.0 | ||||
| 	 */ | ||||
| 	public ZipWriter add(String[] paths, InputStream[] ins) throws IORuntimeException { | ||||
| 		if (ArrayUtil.isEmpty(paths) || ArrayUtil.isEmpty(ins)) { | ||||
| 			throw new IllegalArgumentException("Paths or ins is empty !"); | ||||
| 		} | ||||
| 		if (paths.length != ins.length) { | ||||
| 			throw new IllegalArgumentException("Paths length is not equals to ins length !"); | ||||
| 		} | ||||
|  | ||||
| 		for (int i = 0; i < paths.length; i++) { | ||||
| 			add(paths[i], ins[i]); | ||||
| 		} | ||||
|  | ||||
| 		return this; | ||||
| 	} | ||||
|  | ||||
| 	@Override | ||||
| 	public void close() throws IORuntimeException { | ||||
| 		try { | ||||
| @@ -195,21 +221,7 @@ public class ZipWriter implements Closeable { | ||||
| 	 * @return {@link ZipOutputStream} | ||||
| 	 */ | ||||
| 	private static ZipOutputStream getZipOutputStream(File zipFile, Charset charset) { | ||||
| 		return getZipOutputStream(FileUtil.getOutputStream(zipFile), charset); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * 获得 {@link ZipOutputStream} | ||||
| 	 * | ||||
| 	 * @param out     压缩文件流 | ||||
| 	 * @param charset 编码 | ||||
| 	 * @return {@link ZipOutputStream} | ||||
| 	 */ | ||||
| 	private static ZipOutputStream getZipOutputStream(OutputStream out, Charset charset) { | ||||
| 		if (out instanceof ZipOutputStream) { | ||||
| 			return (ZipOutputStream) out; | ||||
| 		} | ||||
| 		return new ZipOutputStream(out, charset); | ||||
| 		return ZipUtil.getZipOutputStream(FileUtil.getOutputStream(zipFile), charset); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
|   | ||||
| @@ -83,6 +83,21 @@ public class ZipUtil { | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * 获得 {@link ZipOutputStream} | ||||
| 	 * | ||||
| 	 * @param out     压缩文件流 | ||||
| 	 * @param charset 编码 | ||||
| 	 * @return {@link ZipOutputStream} | ||||
| 	 * @since 5.8.0 | ||||
| 	 */ | ||||
| 	public static ZipOutputStream getZipOutputStream(OutputStream out, Charset charset) { | ||||
| 		if (out instanceof ZipOutputStream) { | ||||
| 			return (ZipOutputStream) out; | ||||
| 		} | ||||
| 		return new ZipOutputStream(out, charset); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * 在zip文件中添加新文件或目录<br> | ||||
| 	 * 新文件添加在zip根目录,文件夹包括其本身和内容<br> | ||||
| @@ -370,17 +385,8 @@ public class ZipUtil { | ||||
| 	 * @since 3.0.9 | ||||
| 	 */ | ||||
| 	public static File zip(File zipFile, String[] paths, InputStream[] ins, Charset charset) throws UtilException { | ||||
| 		if (ArrayUtil.isEmpty(paths) || ArrayUtil.isEmpty(ins)) { | ||||
| 			throw new IllegalArgumentException("Paths or ins is empty !"); | ||||
| 		} | ||||
| 		if (paths.length != ins.length) { | ||||
| 			throw new IllegalArgumentException("Paths length is not equals to ins length !"); | ||||
| 		} | ||||
|  | ||||
| 		try (final ZipWriter zipWriter = ZipWriter.of(zipFile, charset)) { | ||||
| 			for (int i = 0; i < paths.length; i++) { | ||||
| 				zipWriter.add(paths[i], ins[i]); | ||||
| 			} | ||||
| 			zipWriter.add(paths, ins); | ||||
| 		} | ||||
|  | ||||
| 		return zipFile; | ||||
| @@ -395,18 +401,7 @@ public class ZipUtil { | ||||
| 	 * @since 5.5.2 | ||||
| 	 */ | ||||
| 	public static void zip(OutputStream out, String[] paths, InputStream[] ins) { | ||||
| 		if (ArrayUtil.isEmpty(paths) || ArrayUtil.isEmpty(ins)) { | ||||
| 			throw new IllegalArgumentException("Paths or ins is empty !"); | ||||
| 		} | ||||
| 		if (paths.length != ins.length) { | ||||
| 			throw new IllegalArgumentException("Paths length is not equals to ins length !"); | ||||
| 		} | ||||
|  | ||||
| 		try (final ZipWriter zipWriter = ZipWriter.of(out, DEFAULT_CHARSET)) { | ||||
| 			for (int i = 0; i < paths.length; i++) { | ||||
| 				zipWriter.add(paths[i], ins[i]); | ||||
| 			} | ||||
| 		} | ||||
| 		zip(getZipOutputStream(out, DEFAULT_CHARSET), paths, ins); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| @@ -419,17 +414,8 @@ public class ZipUtil { | ||||
| 	 * @since 5.5.2 | ||||
| 	 */ | ||||
| 	public static void zip(ZipOutputStream zipOutputStream, String[] paths, InputStream[] ins) throws IORuntimeException { | ||||
| 		if (ArrayUtil.isEmpty(paths) || ArrayUtil.isEmpty(ins)) { | ||||
| 			throw new IllegalArgumentException("Paths or ins is empty !"); | ||||
| 		} | ||||
| 		if (paths.length != ins.length) { | ||||
| 			throw new IllegalArgumentException("Paths length is not equals to ins length !"); | ||||
| 		} | ||||
|  | ||||
| 		try (final ZipWriter zipWriter = new ZipWriter(zipOutputStream)) { | ||||
| 			for (int i = 0; i < paths.length; i++) { | ||||
| 				zipWriter.add(paths[i], ins[i]); | ||||
| 			} | ||||
| 			zipWriter.add(paths, ins); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Looly
					Looly