打包下载 java_java文件下载(单文件下载,多文件打包下载)

packagecom.hhwy.fileview.utils;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.Vector;importjava.util.zip.ZipEntry;importjava.util.zip.ZipOutputStream;public classFileUtil {/*** 把某个文件路径下面的文件包含文件夹压缩到一个文件下

*@paramfile

*@paramrootPath 相对地址

*@paramzipoutputStream*/

public static voidzipFileFun(File file,String rootPath,ZipOutputStream zipoutputStream){if(file.exists()){//文件存在才合法

if(file.isFile()){//定义相关操作流

FileInputStream fis = null;

BufferedInputStream bis= null;try{//设置文件夹

String relativeFilePath = file.getPath().replace(rootPath+File.separator, "");//创建输入流读取文件

fis = newFileInputStream(file);

bis= new BufferedInputStream(fis,10*1024);//将文件装入zip中,开始打包

ZipEntry zipEntry;if(!relativeFilePath.contains("\\")){

zipEntry= new ZipEntry(file.getName());//此处值不能重复,要唯一,否则同名文件会报错

}else{

zipEntry= new ZipEntry(relativeFilePath);//此处值不能重复,要唯一,否则同名文件会报错

}

zipoutputStream.putNextEntry(zipEntry);//开始写文件

byte[] b = new byte[10*1024];int size = 0;while((size=bis.read(b,0,10*1024)) != -1){//没有读完

zipoutputStream.write(b,0,size);

}

}catch(Exception e) {

e.printStackTrace();

}finally{try{//读完以后关闭相关流操作

if(bis != null){

bis.close();

}if(fis != null){

fis.close();

}

}catch(Exception e2) {

System.out.println("流关闭错误!");

}

}

}//else{//如果是文件夹//try {//File [] files = file.listFiles();//获取文件夹下的所有文件//for(File f : files){//zipFileFun(f,rootPath, zipoutputStream);//}//} catch (Exception e) {//e.printStackTrace();//}//

//}

}

}/** 获取某个文件夹下的所有文件*/

public static Vector getPathAllFiles(File file,Vectorvector){if(file.isFile()){//如果是文件,直接装载

System.out.println("在迭代函数中文件"+file.getName()+"大小为:"+file.length());

vector.add(file);

}else{//文件夹

File[] files =file.listFiles();for(File f : files){//递归

if(f.isDirectory()){

getPathAllFiles(f,vector);

}else{

System.out.println("在迭代函数中文件"+f.getName()+"大小为:"+f.length());

vector.add(f);

}

}

}returnvector;

}/*** 压缩文件到指定文件夹

*@paramsourceFilePath 源地址

*@paramdestinFilePath 目的地址*/

public staticString zipFiles(String sourceFilePath,String destinFilePath){

File sourceFile= newFile(sourceFilePath);

FileInputStream fis= null;

BufferedInputStream bis= null;

FileOutputStream fos= null;

ZipOutputStream zos= null;

SimpleDateFormat dateFormat= new SimpleDateFormat("yyyyMMddHHmmss");

String fileName= dateFormat.format(new Date())+".zip";

String zipFilePath= destinFilePath+File.separator+fileName;if (sourceFile.exists() == false) {

System.out.println("待压缩的文件目录:" + sourceFilePath + "不存在.");

}else{try{

File zipFile= newFile(zipFilePath);if(zipFile.exists()) {

System.out.println(zipFilePath+ "目录下存在名字为:" + fileName + ".zip" + "打包文件.");

}else{

File[] sourceFiles=sourceFile.listFiles();if (null == sourceFiles || sourceFiles.length < 1) {

System.out.println("待压缩的文件目录:" + sourceFilePath + "里面不存在文件,无需压缩.");

}else{//读取sourceFile下的所有文件

Vector vector = FileUtil.getPathAllFiles(sourceFile, new Vector());

fos= newFileOutputStream(zipFile);

zos= new ZipOutputStream(newBufferedOutputStream(fos));byte[] bufs = new byte[1024 * 10];for (int i = 0; i < vector.size(); i++) {//创建ZIP实体,并添加进压缩包

ZipEntry zipEntry = new ZipEntry(vector.get(i).getName());//文件不可重名,否则会报错

zos.putNextEntry(zipEntry);//读取待压缩的文件并写进压缩包里

fis = newFileInputStream(vector.get(i));

bis= new BufferedInputStream(fis, 1024 * 10);int read = 0;while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) {

zos.write(bufs,0, read);

}

}

}

}

}catch(FileNotFoundException e) {

e.printStackTrace();throw newRuntimeException(e);

}catch(IOException e) {

e.printStackTrace();throw newRuntimeException(e);

}finally{//关闭流

try{if (null !=bis)

bis.close();if (null !=zos)

zos.closeEntry();

zos.close();

}catch(IOException e) {

e.printStackTrace();throw newRuntimeException(e);

}

}

}returnfileName;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值