InputStream[] inputStreamsList = new InputStream[jsonArr.size()];
String[] fileNameList = new String[jsonArr.size()];

这里是前台获取的文件信息,到fastdfs中查询出相应文件流

for(int i=0;i<jsonArr.size();i++) {
JSONObject jsonObj = (JSONObject) jsonArr.get(i);

String fileName = jsonObj.getString("filename");
String fastdir = jsonObj.getString("fastdir");
String conf_filename = this.getClass().getResource("/db.properties").getPath();
ClientGlobal.init(conf_filename);
TrackerClient tracker = null;
tracker = new TrackerClient();
TrackerServer trackerServer = null;
trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient storageClient = null;
storageClient = new StorageClient(trackerServer, storageServer);
byte[] b = storageClient.download_file("group1", fastdir);

InputStream inputStream = new ByteArrayInputStream(b);
inputStreamsList[i] =inputStream;
fileNameList[i]= fileName;

}

//调用zip打包方法
public static void zip(String[] fileNameList, InputStream[] inputStream,String zipath) throws Exception {
if (fileNameList==null||fileNameList.length==0) {
throw new IllegalArgumentException("fileNameList is empty !");
}
if (fileNameList.length != inputStream.length) {
throw new IllegalArgumentException("fileNameList length is not equals to inputStream length !");
}
if(inputStream==null||inputStream.length==0) {
throw new IllegalArgumentException("inputStream is empty !");
}

ZipOutputStream zipOut = null;
try {

//创建一个空白zip
createNewzip(zipath);

File dir = new File(zipath);
OutputStream out = new FileOutputStream(dir);
zipOut = new ZipOutputStream(out);
for (int i = 0; i < fileNameList.length; i++) {
if (null == inputStream[i]) {
return;
}
try {
zipOut.putNextEntry(new ZipEntry(fileNameList[i]));
byte[] b = new byte[1024];
int len = 0;
while((len = inputStream[i].read(b)) != -1) {
zipOut.write(b,0,len);
}
zipOut.flush();
} catch (Exception e) {
e.printStackTrace();
}finally{
if(inputStream[i] != null) {
inputStream[i].close();
}
}
}
} finally {
try {
zipOut.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

//创建一个空白zip参考

https://www.cnblogs.com/nje19951205/p/11991395.html

利用字节流文件生成包含多文件的zip文件的更多相关文章

  1. 在Linux下查找文件内容包含某个特定字符串的文件

    如何在Linux下查找文件内容包含某个特定字符串的文件? 我的目录下面有test1和test2两个文件夹,里面都含有很多文件,其中test2里面还包含一个test文件夹 我想请问的是,如何通过查找关键 ...

  2. Python组织文件 实践:将文件的不同版本备份为ZIP文件

    功能:备份文件夹.能将文件的不同版本备份下来,并且每个有不同的名字 #! python3 # backupToZip.py - 备份文件的不同版本到压缩文件中 import zipfile,os #f ...

  3. python用zipfile模块打包文件或是目录、解压zip文件实例

    #!/usr/bin/env python # -*- coding: utf-8 -*- from zipfile import * import zipfile #解压zip文件 def unzi ...

  4. proto文件生成对应的js和ts文件

    安装protobuf 先要安装node.js,然后用npm安装protobuf npm install -g protobufjs 生成js文件 单个文件 pbjs -t static-module ...

  5. C++头文件的包含顺序研究

    一.<Google C++ 编程风格指南>里的观点 公司在推行编码规范,领导提议基本上使用<Google C++ 编程风格指南>.其中<Google C++ 编程风格指南 ...

  6. C_文件包含.h文件和包含.c文件总结

    很多人对C语言中的 “文件包含”都不陌生了,文件包含处理在程序开发中会给我们的模块化程序设计带来很大的好处,通过文件包含的方法把程序中的各个功能模块联系起来是模块化程序设计中的一种非常有利的手段. 文 ...

  7. core文件生成和路径设置

    在程序崩溃时,内核会生成一个core文件,即程序最后崩溃时的内存映像,和程序调试信息. 之后可以通过gdb,打开core文件察看程序崩溃时的堆栈信息,可以找出程序出错的代码所在文件和函数. 1.cor ...

  8. 【grpc proto】python使用proto文件生成简易的服务端和客户端

    1.安装python-grpc(注意,是grpcio包,不是grpc包!) pip install grpcio 2.编写.proto文件 grpc教程:http://doc.oschina.net/ ...

  9. 爬虫文件存储:txt文档,json文件,csv文件

    5.1 文件存储 文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 Json 格式.CSV 格式等,本节我们来了解下文本文件的存储方式. 5.1.1 TXT文本存储 将数 ...

随机推荐

  1. 每天一个Linux常用命令 cp命令

    Linux cp命令主要用于复制文件或目录 -a:此选项通常在复制目录时使用,它保留链接.文件属性,并复制目录下的所有内容.其作用等于dpR参数组合. -d:复制时保留链接.这里所说的链接相当于Win ...

  2. 请问如何实现字符串UTF8->BIG5,BIG5->UTF8。保证送分。-Java/JavaSE

    请问如何实现字符串UTF8-> BIG5,BIG5-> UTF8. ------回答--------- ------其他回答(100分)--------- public String BI ...

  3. Jedis连接池的使用(转)

    http://www.cnblogs.com/linjiqin/archive/2013/06/14/3135248.html 所需jar:jedis-2.1.0.jar和commons-pool-1 ...

  4. centos 6.5 修改主机名

    使用 root 账号登录,编辑 vi /etc/sysconfig/network 此时的主机名如下 HOSTNAME=localhost.localdomain 修改 HOSTNAME=newnam ...

  5. Python改变当前工作目录

    import os print(os.getcwd()) # 打印当前工作目录 os.chdir('/Users/<username>/Desktop/') # 将当前工作目录改变为`/U ...

  6. leetcood学习笔记-26-删除排序数组中的重复项

    题目描述: 第一次提交: class Solution: def removeDuplicates(self, nums) -> int: for i in range(len(nums)-1, ...

  7. React中Class的概念

    Class的概念 一.简介 javaScript是面向对象的编程语言,可以说所以的能够被描述的事.物或抽象的东西,都是可以是对象.而我们记录的对象,会有具有同样的属性和行为. 为了节省重写相同的代码. ...

  8. Delphi 窗体函数 ShowScrollBar 控制滚动条

    API函数 函数来源:FUNCTION ulong ShowScrollBar(ulong hwnd,ulong wBar,ulong bShow) LIBRARY "user32.dll& ...

  9. Delphi中点击网页弹出的Alert对话框的确定按钮

    思路: 使用Windows API函数遍历窗口,查找指定标题的窗口,然后从该窗口查找确定按钮,向该按钮发送鼠标消息进行模拟点击.由于IE8由Alert弹出的网页对话框的标题是“来自网页的消息”,而IE ...

  10. Vue学习笔记【15】——Vue实例的生命周期

    生命周期与生命周期钩子 什么是生命周期:从Vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期! 生命周期钩子:就是生命周期事件的别名而已: 生命周期钩子 = 生命周期 ...