java io流将多个文件写进zip文件

野性酷女 2021-11-08 23:12 353阅读 0赞
  1. public static void main(String[] args) throws Exception {
  2. //分别是三个文件的输入流
  3. InputStream in1 = new FileInputStream("E:/nomanager/test/file1.txt");
  4. InputStream in2 = new FileInputStream("E:/nomanager/test/file2.txt");
  5. InputStream in3 = new FileInputStream("E:/nomanager/test/file3.txt");
  6. //分别是三个文件读取时的缓冲区大小,1024Bytes,也就是说每次读1M,假如文件1有2.5M,那就要读三次
  7. byte[] b1=new byte[1024];
  8. byte[] b2=new byte[1024];
  9. byte[] b3=new byte[1024];
  10. //每个文件读完后,用一个字符串存储文件内容
  11. String s1="";
  12. String s2="";
  13. String s3="";
  14. //下面这个while循环读文件的代码不知道你看不看得懂,我不知道该怎么写注释,你要是不懂再问我吧
  15. int len1=0;
  16. int len2=0;
  17. int len3=0;
  18. while((len1=in1.read(b1))!=-1){
  19. s1+=new String(b1, 0, len1);
  20. }
  21. while((len2=in2.read(b2))!=-1){
  22. s2+=new String(b2, 0, len2);
  23. }
  24. while((len3=in3.read(b3))!=-1){
  25. s3+=new String(b3, 0, len3);
  26. }
  27. //定义输出流,目的地是aaa.zip
  28. FileOutputStream fout = new FileOutputStream("E:/nomanager/test/aaa.zip");
  29. //将三个文件的内容放进一个map里
  30. Map<String, byte[]> datas = new HashMap<String, byte[]>();
  31. datas.put("file1.txt", s1.getBytes());
  32. datas.put("file2.txt", s2.getBytes());
  33. datas.put("file3.txt", s3.getBytes());
  34. //装饰器模式:用ZipOutputStream包装输出流,使其拥有写入zip文件的能力
  35. ZipOutputStream zipout = new ZipOutputStream(new BufferedOutputStream(fout));
  36. //遍历
  37. Set<String> keys = datas.keySet();
  38. for (String key : keys) {
  39. //下面就是循环把每个文件写进zip文件
  40. InputStream bin = new BufferedInputStream(new ByteArrayInputStream(datas.get(key)));
  41. byte[] b = new byte[1024];
  42. zipout.putNextEntry(new ZipEntry(key));
  43. int len = -1;
  44. while ((len = bin.read(b)) !=-1) {
  45. zipout.write(b, 0, len);
  46. }
  47. }
  48. zipout.close();
  49. }

发表评论

表情:
评论列表 (有 0 条评论,353人围观)

还没有评论,来说两句吧...

相关阅读