使用java在zip压缩包中增加文件

1:注意事项:下边工具类代码中:zipUrl等路径不要有空格存在,或者把所有空格转换成"%2520"

public class ZipAddUtils {

	/**
	 * 参数1:原始路径
	 * 参数2:.zip结束后的路径:例:D:\\temp\\playbook_1936_拍照商品照片.zip\\11\\22。此时11\\22\\文件名称就是参数2
	 * 参数3:固定写死的zip路径
	 * 注意: 1:zip压缩包不能动态的添加文件夹,所以在压缩之前需要生成好全部的文件夹。
	 *      2:在往zip包下不同文件夹添加数据时,需要注意:完整路径。例:D:/temp/playbook_1936_拍照商品照片.zip/33/44/时toUrl的路径开始地必须时zip之后第一个开始
	 * @create 2019年8月5日
	 * @param args
	 */
	public static void main(String[] args) {
		String zipUrl="D:/temp/playbook_1936_拍照商品照片.zip";
		String fromUrl="C:/图片/000.png";
		String toUrl="/33/44/000.png";
		try {
			boolean result = add(zipUrl,fromUrl ,toUrl);
		} catch (IOException e) {
			e.printStackTrace();
		}

	}
	public static boolean add(String zipUrl,String fromUrl,String toUrl) throws IOException {
		Map  env = new HashMap <>(); 
	    env.put("create","true");
	    //使用语法定位文件系统 
	    //在java.net.JarURLConnection中定义
	    Path path = Paths.get(zipUrl);
	    URI uri = URI.create("jar:"+path.toUri());
	   try(FileSystem zipfs = FileSystems.newFileSystem(uri,env)){
	        Path externalTxtFile = Paths.get(fromUrl);
	        Path pathInZipfile = zipfs.getPath(toUrl);
	        //将文件复制到zip文件中
			Files.copy(externalTxtFile,pathInZipfile,StandardCopyOption.REPLACE_EXISTING);
			return true;
	    }catch (Exception e) {
	    	return false;
		}
	}
}

错误1:zipUrl:zip的路径中存在空格。fromUrl:原始文件路径中存在空格。toUrl:往zip包中插入文件的位置存在空格,都是这个错误;

使用java在zip压缩包中增加文件_第1张图片

错误2:在zip文件夹里边创建文件夹方式

使用java在zip压缩包中增加文件_第2张图片

思路:在zip里边我没有找到可以动态生成文件夹的方式,所以我是在压缩之前把文件夹先生生成好,在再把文件导入到正确的文件夹中,至于怎么实现,你把黑色代码的测试工具类理解透彻就明白了。zip文件系统好像适用于java1.5版本以上。源代码我还没看,这个是别人说的。

给大家推荐一个好的网址这个对于往zip文件系统中追加文件说的比较详细,并且下边有一些很有用的评论可以看一下:

网址:https://stackoverflow.com/questions/9873845/java-7-zip-file-system-provider-doesnt-seem-to-accept-spaces-in-uri

如果大家还有比的比较好的方法,欢迎留言一起讨论!!!!

 

 

 

你可能感兴趣的:(工具包-随笔)