问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

高分:用java实现服务器上多个文件先打包,然后下载,下载完成后删除包!

发布网友 发布时间:2022-06-08 00:36

我来回答

4个回答

热心网友 时间:2023-11-01 04:21

向压缩包里添加文件时直接把服务器上的文件用流读进来就行,不用非把文件放到同一个目录,用程序生成压缩包和用命令行工具是不一样的,不要想当然。 写了个示例程序,你可以参考一下。这个示例不使用临时文件,把 OutputStream os替换成你下载用的输出流就可以实现一边压缩一边下载。注意java.util.zip不支持非ascii文件名。想支持中文文件名可以用apache ant或其他的库。

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipTest {

public static void main( String[] args ) {
try {
writeZip();
} catch ( IOException e ) {
e.printStackTrace();
}
}

private static void writeZip() throws IOException {
String[] files = { "/ws/dir1/file1", "/ws/dir2/file2", "/ws/file3", "/pub/success.wav" };
OutputStream os = new BufferedOutputStream( new FileOutputStream( "/ws/archive.zip" ) );
ZipOutputStream zos = new ZipOutputStream( os );
byte[] buf = new byte[8192];
int len;
for ( String filename : files ) {
File file = new File( filename );
if ( !file.isFile() ) continue;
ZipEntry ze = new ZipEntry( file.getName() );
zos.putNextEntry( ze );
BufferedInputStream bis = new BufferedInputStream( new FileInputStream( file ) );
while ( ( len = bis.read( buf ) ) > 0 ) {
zos.write( buf, 0, len );
}
zos.closeEntry();
}
zos.close();
}

}

热心网友 时间:2023-11-01 04:22

jdk有个包--- java.util.jar
1 这个包里的类可以打包文件,具体做法可以参考API,看你的水平 通过API了解新类 应该不是问题了。
2 删除文件--不用说了吧,file.delete.....
3 下载就更加简单了, 用“流”将文件输出就可以了。

再不行??? 信息我吧。 但是不会给你源代码 只有给你思路了。追问现在最难实现的,就是文件放在不同的文件夹内,怎么能把他们给整合打成一个包!
如果不能实现的话,就只能根据路径把所有文件复制到一个文件夹内,然后打包那个文件夹进行下载,下载后删除文件夹跟压缩包了。但是那样的话,会大大增加服务器的负荷!!!

追答不是吧 ,, 放在不同文件夹 也可以打包进去的。

热心网友 时间:2023-11-01 04:22

可以把这些url,name暂存到session里面
下载和上传可以使用插件jspsmart
很久没有使用了 稍微看一下API吧jspsmart就是把上传和下载的工作封装简化,所以使用非常简单的
下载完成后调用file.delete();就在服务器上删掉了

热心网友 时间:2023-11-01 04:23

如果文件不是很大的话可以用字节数组保存已经上传的文件信息, 和内容.
然后在直接输出打包后的文件. 供下载使用.

如果文件很大的话要用临时文件了.
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 生存战争2丧尸围城没有自动删除包 delphi 请问如何删除安装好的包? 扫黑风暴光头是谁 无限宝,下载了之后刚开始可以登陆,后来再次登录的时候显示密码错误? 商洛市中国建设银行(庆城支行)在哪 ? 中国邮政储蓄银行股份有限公司商洛市分行怎么样? 商洛市山阳县有没有中国银行? 商洛市黑山邮政银行,开户行是 商洛市商州区名人街转盘工行得开户行名称是 商洛招商银行 商洛市能办兴业银行信用卡吗? 商洛北新街西岗楼东面工商银行的开户行名称 商洛市有交通银行 商洛市有招商银行网点嘛? 陕西省洛南县有几个农业银行 中国银行商洛商州分行行号大全 手机默认的设备名称是什么 抽出黄黄的鼻涕中带红色的血样的,请问是什么症 18款迈锐宝支持HiCar盒子吗 改善领导与群众关系的咨询建议报告500字 这个工程机械车叫什么名字? 有些winrar压缩包删除选项为灰色不可用 怎么彻底删除电脑上的东西,比如很大的游戏安装包,点删除就行了吗??会不会占c盘内存啊?? 怎么删掉背包里没用的东西 会计师事务所会计岗位有哪些 农行办理ETC怎么还得需要银行流水呀,如果没有流水怎么半 MySQL过程中出现 Starting MySQL/etc/init.d/mysqld: line 159: kill: (5835) - 没有那个进程 [失败] 王太勇的代表论著 2015年美国大学研究生录取gre成绩多少 贵州省英文简介 世界最小电脑尺寸多少 宝马x1车载音乐支持什么音乐格式? 新X1可以播放U盘里面的视频文件吗 公司可以借款给公司以外的人员吗?有什么税务风险,老师? 格力员工在公司能借款吗 公司借钱员工购房款要怎样和员工写合同 三年级作文六一儿童节外面表演 2007年美规奔驰S550现在能卖多少钱? 求好心人帮助 请问进口奔驰S550报价多少?海运到国内运费、手续费、关税需要多少?全部加起来需要多少钱 卉驰550报价是多少钱一辆?