我的应用程序是一个招标文件系统,其中每个招标编号都附有一个或多个 pdf 文件。
应用程序是在 java ee 中使用 struts 和 mysql 完成的。
在数据库表中,存储了投标编号的每个相关 pdf 文件的路径。
我想获取所有 pdf 文件并为每个投标号创建一个 ZIP 文件,以便用户可以下载该 zip 文件并单击一下即可获得所有相关文档。
我尝试了谷歌并找到了一些名为ZipOutputStream
但我不明白如何在我的应用程序中使用它。
我的应用程序是一个招标文件系统,其中每个招标编号都附有一个或多个 pdf 文件。
应用程序是在 java ee 中使用 struts 和 mysql 完成的。
在数据库表中,存储了投标编号的每个相关 pdf 文件的路径。
我想获取所有 pdf 文件并为每个投标号创建一个 ZIP 文件,以便用户可以下载该 zip 文件并单击一下即可获得所有相关文档。
我尝试了谷歌并找到了一些名为ZipOutputStream
但我不明白如何在我的应用程序中使用它。
你快到了……这是一个如何使用的小例子ZipOutputStream
……假设你有一个 JAVA 助手 H,它返回带有 pdf 文件路径(和相关信息)的数据库记录:
FileOutputStream zipFile = new FileOutputStream(new File("xxx.zip"));
ZipOutputStream output = new ZipOutputStream(zipFile);
for (Record r : h.getPdfRecords()) {
ZipEntry zipEntry = new ZipEntry(r.getPdfName());
output.putNextEntry(zipEntry);
FileInputStream pdfFile = new FileInputStream(new File(r.getPath()));
IOUtils.copy(pdfFile, output); // this method belongs to apache IO Commons lib!
pdfFile.close();
output.closeEntry();
}
output.finish();
output.close();
签出这段代码,在这里您可以轻松创建一个 zip 文件目录:
public class CreateZipFileDirectory {
public static void main(String args[])
{
try
{
String zipFile = "C:/FileIO/zipdemo.zip";
String sourceDirectory = "C:/examples";
//create byte buffer
byte[] buffer = new byte[1024];
FileOutputStream fout = new FileOutputStream(zipFile);
ZipOutputStream zout = new ZipOutputStream(fout);
File dir = new File(sourceDirectory);
if(!dir.isDirectory())
{
System.out.println(sourceDirectory + " is not a directory");
}
else
{
File[] files = dir.listFiles();
for(int i=0; i < files.length ; i++)
{
System.out.println("Adding " + files[i].getName());
FileInputStream fin = new FileInputStream(files[i]);
zout.putNextEntry(new ZipEntry(files[i].getName()));
int length;
while((length = fin.read(buffer)) > 0)
{
zout.write(buffer, 0, length);
}
zout.closeEntry();
fin.close();
}
}
zout.close();
System.out.println("Zip file has been created!");
}
catch(IOException ioe)
{
System.out.println("IOException :" + ioe);
}
}
}