以zip的格式 导出.xlsx文件 但是怎么在zip 包里添加 文件夹?

ifonly 发布于 2013/08/12 21:48
阅读 760
收藏 0
需求是这样的 导出多个.xlsx文件   放在不同的文件夹里 然后以压缩包zip的格式导出 。生成.xlsx文件我会做,以zip格式导出我也会做,但是怎样能生成新的文件夹? 然后把生成的.xlsx文件 放在文件夹里?? 求高手指点

以下是问题补充:

@ifonly:java动态生成多个excel 放在不同的文件夹里 并打成zip包 (2013/08/12 22:44)
加载中
0
TrulyBelieve
TrulyBelieve

使用ZipOutputStream不需要处理文件夹,只需把文件塞进去,注意文件名,

比如磁盘文件名为c:\aaa\bbb\a.xlsx,读取这个文件流写到zip流里,ZipEntry为ccc/a.xlsx,则a.xlsx就在zip里的ccc目录下。

zout = new ZipOutputStream(new FileOutputStream(zip, false));
			for (int i = 0; i < files.length; i++)
			{
				f = new File(dirBase + files[i]);
				if (f.exists())
				{
					ZipEntry entry = new ZipEntry(files[i]);
					zout.putNextEntry(entry);

					fin = new FileInputStream(f);
					while (true)
					{
						len = fin.read(buff);
						if (len <= 0)
							break;
						zout.write(buff, 0, len);
					}
					fin.close();
					fin = null;
				}
			}


ifonly
ifonly
非常感谢 ,这就去测试一下
0
duty
duty
可以先new 一个文件夹,把xlsx放到文件夹里,再把这个文件夹压缩了。
ifonly
ifonly
回复 @breaking : 直接用ZipOutputStream 问题是文件夹的名称都是相同的 这期间有别的人下载需要同样的文件夹名 怎么办?能不能临时的在内存里建个文件夹 然后把生成的Excel放进去
duty
duty
回复 @ifonly : 这是一个变通的做法,就是相当于你在一个临时目录里把那几个xlsx文件拷贝过来,把临时目录压缩供下载,下载完成之后删除临时目录即可。 你用的是什么插件做zip压缩的?
ifonly
ifonly
怎么放在文件夹里呢? 要有多个文件夹... 而且下载完成后要删除,这期间别的人下载怎么办?
0
逝水fox
逝水fox

A directory entry is defined to be one whose name ends with a '/'.

看ZipEntry的文档

ifonly
ifonly
回复 @逝水fox : 谢谢!问题已经解决了
逝水fox
逝水fox
回复 @ifonly : 可以啊 每个文件夹都是 一个Entry 只要名字是/结尾
ifonly
ifonly
这个可以放多个文件夹吗?
0
ifonly
ifonly

引用来自“TrulyBelieve”的答案

使用ZipOutputStream不需要处理文件夹,只需把文件塞进去,注意文件名,

比如磁盘文件名为c:\aaa\bbb\a.xlsx,读取这个文件流写到zip流里,ZipEntry为ccc/a.xlsx,则a.xlsx就在zip里的ccc目录下。

zout = new ZipOutputStream(new FileOutputStream(zip, false));
			for (int i = 0; i < files.length; i++)
			{
				f = new File(dirBase + files[i]);
				if (f.exists())
				{
					ZipEntry entry = new ZipEntry(files[i]);
					zout.putNextEntry(entry);

					fin = new FileInputStream(f);
					while (true)
					{
						len = fin.read(buff);
						if (len <= 0)
							break;
						zout.write(buff, 0, len);
					}
					fin.close();
					fin = null;
				}
			}


唉 纠结我半天的问题  只需输个目录就解决。。。 非常感谢!也感谢一下@ 逝水fox的提醒
返回顶部
顶部