-2
   <% // Set the content type based to zip
    response.setContentType("Content-type:text/zip");
    response.setHeader("Content-Disposition", "attachment; filename=mytest.zip");

    // List of files to be downloaded
    List files = new ArrayList();
    files.add(new File("C:/first.txt"));
    files.add(new File("C:/second.txt"));
    files.add(new File("C:/third.txt"));

    ServletOutputStream out1 = response.getOutputStream();
    ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(out1));
    for (Object file : files) 
    {
        //System.out.println("Adding file " + file.getName());
        System.out.println("Adding file " + file.getClass().getName());
        //zos.putNextEntry(new ZipEntry(file.getName()));
        zos.putNextEntry(new ZipEntry(file.getClass().getName()));
        // Get the file
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
        } catch (Exception E) {
            // If the file does not exists, write an error entry instead of file  contents
            //zos.write(("ERROR: Could not find file " + file.getName()).getBytes());
            zos.write(("ERROR: Could not find file" +file.getClass().getName()).getBytes());
            zos.closeEntry();
            //System.out.println("Could not find file "+ file.getAbsolutePath());
            continue;
        }
        BufferedInputStream fif = new BufferedInputStream(fis);
        // Write the contents of the file
        int data = 0;
        while ((data = fif.read()) != -1) {
            zos.write(data);
        }
        fif.close();
        zos.closeEntry();
        //System.out.println("Finished adding file " + file.getName());
        System.out.println("Finished adding file " + file.getClass().getName());
    }
    zos.close();
%>

这是我的实际程序,想要压缩多个文件然后下载它,我这样做是对还是错,我是 JAVA 编程新手,你能帮帮我吗???

4

1 回答 1

0

您的for循环应如下所示:

for (File file : files) {
   ...

或者

for (String file : files) {
   ...

您声明file变量的方式使编译器假定它是一个Object,而不是一个File实例。因此,您会收到编译错误,因为没有FileInputStream构造函数接受Object. file必须是文件的绝对路径FileString包含文件的绝对路径。

另一个错误是您将文​​件名传递给 ZipEntry 的方式。使用:

file.getClass().getName()

将导致"java.io.File"or "java.lang.String",而不是文件名。要设置文件的正确名称,请使用File#getName().

于 2012-06-16T12:45:21.457 回答