我举了这个例子:http://www.mkyong.com/java/how-to-download-file-from-website-java-jsp
File file = new File("path/to/file/test.txt");
FileInputStream fis= new FileInputStream(file);
ServletOutputStream out = response.getOutputStream();
byte[] outputByte = new byte[4096];
//copy binary contect to output stream
while(fis.read(outputByte, 0, 4096) != -1)
{
out.write(outputByte, 0, 4096);
}
fis.close();
out.flush();
out.close();
问题是下载文件仍然不完整。在文件末尾仍然缺少一些字符
所以我尝试了另一个例子:
File file = new File("path/to/file/test.txt");
FileInputStream fis= new FileInputStream(file);
IOUtils.copy(fis,response.getOutputStream());
fis.close();
下载文件已完成。所以我的问题是为什么第一个例子不起作用,第二个例子是正确的
答案 0 :(得分:1)
从InputStream.read()
返回的值很重要,请使用它!
答案 1 :(得分:1)
不确定是否是原因,但您可以替换此
//copy binary contect to output stream
while(fis.read(outputByte, 0, 4096) != -1)
{
out.write(outputByte, 0, 4096);
}
与
int length=-1;
while ( (length = fis.read(outputByte, 0, 4096)) != -1) {
out.write(outputByte, 0, length);
}
让我们知道它是怎么回事?