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循环,循环通过一个向量文件
,该向量有文件名并下载它们。但只有第一个文件被下载。MyVector
的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文件的真正解决方案。谢谢