批量下载
博客专区 > to_ln 的博客 > 博客详情
批量下载
to_ln 发表于3个月前
批量下载
  • 发表于 3个月前
  • 阅读 10
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 新注册用户 域名抢购1元起>>>   

摘要: 实现简单批量下载

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

 

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();
         }
     }


}

共有 人打赏支持
粉丝 0
博文 28
码字总数 7041
×
to_ln
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: