Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java OutputStream:下载多个文件_Java_Outputstream_Fileoutputstream - Fatal编程技术网

Java OutputStream:下载多个文件

Java OutputStream:下载多个文件,java,outputstream,fileoutputstream,Java,Outputstream,Fileoutputstream,我正在尝试使用OutputStream下载多个文件。我创建了一个for循环,循环通过一个向量文件,该向量有文件名并下载它们。但只有第一个文件被下载。MyVector的FileZero.xml位于0,而FileOne.xml位于1,并且仅下载FileZero。请帮忙;这是我的密码 for (int x = 0; x < FileS.size(); x++) { ByteArrayOutputStream buffer = new ByteArrayOu

我正在尝试使用
OutputStream
下载多个文件。我创建了一个for循环,循环通过一个向量
文件
,该向量有文件名并下载它们。但只有第一个文件被下载。My
Vector
FileZero.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();
    }
}
for(int x=0;x
此外,我还尝试注释了
out.flush()
out.close()
;但这没用。我尝试将
OutputStream
对象放在循环之外,只是为了测试这一点也没有帮助。

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

但是,即使您将
out.close()注释掉,也存在一个问题:您对单个文件的长度设置了两次
Content Length',但输出了两个文件的内容,因此长度必须是各个长度的总和

看起来您正试图在一个请求中下载这两个文件。唯一可靠的方法是将它们都打包到一个单独的存档(如ZIP存档)中,然后下载一个文件,请参见此处:

或者一个接一个地下载它们。

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

但是,即使您将
out.close()注释掉,也存在一个问题:您对单个文件的长度设置了两次
Content Length',但输出了两个文件的内容,因此长度必须是各个长度的总和

看起来您正试图在一个请求中下载这两个文件。唯一可靠的方法是将它们都打包到一个单独的存档(如ZIP存档)中,然后下载一个文件,请参见此处:


或者一个接一个地下载。

没有例外吗?没有例外。我在调试中运行了代码,它正常地通过了每个步骤。你没有得到任何异常吗?没有异常。我在debug中运行了代码,它正常地完成了每个步骤是的,这是有意义的,但是您提供的链接也给出了一个想法,而不是如何创建包含多个文件的zip文件的真正解决方案。感谢thoughYeah,这很有意义,但您提供的链接也提供了一个想法,而不是一个关于如何创建包含多个文件的zip文件的真正解决方案。谢谢