-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

もう1つのエラーは、ファイルの名前をZipEntryに渡す方法です。使用:

file.getClass().getName()

結果は"java.io.File"または"java.lang.String"になり、ファイル名ではありません。ファイルの固有名を設定するには、を使用しますFile#getName()

于 2012-06-16T12:45:21.457 に答える