【问题标题】:How to download whole file from website如何从网站下载整个文件
【发布时间】:2013-02-18 23:47:59
【问题描述】:

我遵循这个例子: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();

下载文件已完成。所以我的问题是为什么第一个例子不起作用,而第二个例子是正确的

【问题讨论】:

    标签: java io inputstream


    【解决方案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);
    }
    

    告诉我们进展如何?

    【讨论】:

    • 是的,它非常有效。第二个例子呢。如何下载文件也是正确的方法吗?
    • @hudi 如果IOUtils 来自apache.commons.io 那么它有点基于第一个示例,所以可以使用它。
    • 记住这是一个阻塞循环,所以如果你是多线程的,并且需要能够取消,你会想要切换到使用基于通道的 io。见这里:thomaswabner.wordpress.com/2007/10/09/…
    【解决方案2】:

    InputStream.read()返回的值很重要,使用它!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多