文档章节

批量下载

to_ln
 to_ln
发布于 2017/09/04 16:50
字数 466
阅读 38
收藏 0

前段时间实现了批量下载,简单整理了下用到的代码。

 

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class test {
 
 public static void main(String args[]){
  try {
   downLoadFiles();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 //文件打包下载
    public static void downLoadFiles()
             throws Exception {
         try {
         
          //要下载的文件集合
          List<File> files = new ArrayList<File>();
          File  fs = new File("C:/Users/Administrator/Desktop/demo");
          File[] tempList  = fs.listFiles();
          if(tempList.length > 0){
           for(File f : tempList) {
                     //如果是文件,直接打印文件名称
                     if(f.isFile()){//文件时,放进去进行打包
                    files.add(f);
                    }
                   //目录时,可根据情况,后面实现的不能打包目录,只是把目录里文件取出来进行打包
                   //else{
                   // files.add(f);
                   //}
           }

          }
     
             //这里我直接下载到本地了,可以根据需求,先下载至临时文件里,下载后将这个临时文件删除
             File file = new File("C:/Users/Administrator/Desktop/批量下载/filedownload.zip");
             if (!file.exists()){  
                 file.createNewFile();  
             }
             //创建文件输出流
            FileOutputStream fous = new FileOutputStream(file);
           
            //转换为ZipOutputStream输出流
            ZipOutputStream zipOut
             = new ZipOutputStream(fous);
             // 开始打包
            zipFile(files, zipOut);
             zipOut.close();
             fous.close();
         }catch (Exception e) {
                 e.printStackTrace();
             }
     
     }

    /**
      * 打成zip压缩包
      * @param List<File>; 
      * @param org.apache.tools.zip.ZipOutputStream 
      */
    public static void zipFile
    (List files,ZipOutputStream outputStream) {
 int size = files.size();
 for(int i = 0; i < size; i++) {
     File file = (File) files.get(i);
     zipFile(file, outputStream);
 }
 }


    /** 
      * 根据输入的文件与输出流对文件进行打包
     * @param File
      * @param org.apache.tools.zip.ZipOutputStream
      */
     public static void zipFile(File inputFile,
             ZipOutputStream ouputStream) {
         try {
             if(inputFile.exists()) {
                 //文件打包,如果有子目录,这里把文件内的子目录下的文件取出来打包,没有实现目录打包
                 if (inputFile.isFile()) {
                     FileInputStream IN = new FileInputStream(inputFile);
                     BufferedInputStream bins = new BufferedInputStream(IN, 512);
                     //org.apache.tools.zip.ZipEntry
                     ZipEntry entry = new ZipEntry(inputFile.getName());
                     ouputStream.putNextEntry(entry);
                     // 向压缩文件中输出数据  
                     int nNumber;
                     byte[] buffer = new byte[512];
                     while ((nNumber = bins.read(buffer)) != -1) {
                         ouputStream.write(buffer, 0, nNumber);
                     }
                     // 关闭创建的流对象  
                     bins.close();
                     IN.close();
                 } else {//若为目录时,取出文件再打包
                     try {
                         File[] files = inputFile.listFiles();
                         for (int i = 0; i < files.length; i++) {
                             zipFile(files[i], ouputStream);
                         }
                     } catch (Exception e) {
                         e.printStackTrace();
                     }
                 }
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
     }


}

© 著作权归作者所有

共有 人打赏支持
to_ln
粉丝 0
博文 69
码字总数 15307
作品 0
东城
私信 提问
Rexdeploy 一个基于名字服务自动化平台(重磅更新)

Rexdeploy Rexdeploy: 一个基于名字服务自动化平台(命令行CLI版 和 API接口版) 中文文档 简单描述 RexDeploy是一个免客户端安装的管控平台,支持基于,基于,以及基于,用户管理等,同时也...

运维技术
07/24
0
0
医学教育网批量资源下载程序之——完成

大家好! 经过好长时间的拆腾,终于实现了 “医学教育网批量资源下程序” 。 相关的博文: 医学教育网批量资源下载程序之——登陆 医学教育网批量资源下载程序之——探路 医学教育网批量资源...

临峰不畏
2015/01/18
0
1
Rexdeploy: 一个基于名字服务自动化平台(命令行CLI版 和 API接口版)

Rexdeploy Rexdeploy: 一个基于名字服务自动化平台(命令行CLI版 和 API接口版) 中文文档 简单描述 RexDeploy是一个免客户端安装的管控平台,支持基于,基于,以及基于,用户管理等,同时也...

运维技术
07/25
0
0
更好用的chrome下载器 chrono

众所周知, chrome原生的下载功能的确不太好用, 如果我们需要查看当前的下载任务, 需要点击两次(点击右上角 三个点 , 点击下载内容), 而使用了chrono, 只需要点击一次(点击chrono) chrono还集...

木子昭
08/12
0
0
JEPLUS平台Excel批量导入的操作配置——JEPLUS软件快速开发平台

JEPLUS平台Excel批量导入的操作配置 JEPLUS平台支持Excel数据的批量导入,但是很多客户不明白批量导入怎么配置,今天这个笔记就简单说一下JEPLUS的Excel数据批量导入怎么来配置。 一、效果展...

JEPLUS
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

zookeeper配置与使用

一.登录官网下载 不要带后缀的,那是公侧版本,下稳定版,比如3.4.9 二.安装与使用 解压后bin里是启动程序 配置文件:在conf下 复制zoo_sample.cfg改名为为zoo.cfg,打开zoo修改文件...

小兵胖胖
20分钟前
0
0
spring源码阅读笔记(一)

ClassPathXmlApplicationContext 与 FileSystemXmlApplicationContext 用了这么久的框架,是时候搞一下源码了,一般最初接触spring 从以下步骤开始 创建一个bean类 并创建 ooxx.xml之类的spr...

NotFound403
43分钟前
2
0
MySQL主从配置

12月14日任务 17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试主从同步 MySQL主从介绍 MySQL主从又叫做Replication、AB复制。简单将就是A/B两个服务器做主从后,在A上写...

robertt15
46分钟前
6
0
我的Linux系统九阴真经

在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行业,共享经济等概念的公...

问题终结者
58分钟前
21
0
Java 使用 gson 对 json 根据 key 键进行排序

引入Google的gson jar <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.0</version>......

yh32
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部