Java OutputStream:下载多个文件

时间:2018-02-24 18:17:02

标签: java outputstream fileoutputstream

我正在尝试使用OutputStream下载多个文件。我创建了一个for循环,循环遍历Vector FileS,它有文件名并下载它们。但只有第一个文件被下载。我的VectorFileZero.xml为0,FileOne.xml为1,只有fileZero被下载。请帮忙;这是我的代码

        for (int x = 0; x < FileS.size(); x++) {
            ByteArrayOutputStream buffer = new ByteArrayOutputStream();
            int nRead;
            byte[] data = new byte[1024];
            reportFile = rm.getClass().getResourceAsStream("/folder/" + FileS.elementAt(x));
            try {
                while ((nRead = reportFile.read(data, 0, data.length)) != -1) {
                    buffer.write(data, 0, nRead);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        buffer.flush();
        byte[] byteArray = buffer.toByteArray();

        try {

            byte bytes[] = null;
            bytes = byteArray;
            response.setContentLength(bytes.length);
            response.setContentType("application/force-download");
            response.setHeader("Content-Disposition", "inline;filename=" + FileS.elementAt(x));
            OutputStream out = response.getOutputStream();
            out.write(bytes);
            out.flush();
            out.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    } catch (Exception e) {
       e.printStackTrace();
    }
}

此外,我尝试评论out.flush()out.close();但它没有帮助。我尝试将OutputStream对象放在循环之外,只是为了测试它也没有帮助。

1 个答案:

答案 0 :(得分:1)

关闭输出流(在第一次迭代时),然后尝试写入它(在第二次迭代上)当然是一个错误。

但是,即使您使用单个文件的长度注释'0' Content-Length`两次,但是您输出了两个文件内容,因此长度必须是各个长度的总和。

看起来您正尝试在一个请求中下载这两个文件。唯一可靠的方法是将它们打包到一个存档(如ZIP存档)并下载一个文件,请参见此处:How to download multiple files with one HTTP request?

或者只是逐个下载它们。