请求下载时,文件保持0字节?

时间:2014-03-14 06:03:35

标签: java buffer

亲爱的,我写了一些代码来下载文件并将其放在桌面上。

但是每当它开始下载时,它只保持0字节,为什么呢?

这是我的代码:

    private void addToDesktop() throws IOException {

    URL url = new URL("theurl");
    URLConnection connection = url.openConnection();
    InputStream inputstream = connection.getInputStream();
    FileSystemView filesys = FileSystemView.getFileSystemView();
    filesys.getHomeDirectory();
    BufferedOutputStream bufferedoutputstream = new BufferedOutputStream(new FileOutputStream(new File(filesys.getHomeDirectory() + "/client2.jar")));
    byte[] buffer = new byte[1024];
    int bytesRead = 0;

    while(bytesRead == inputstream.read(buffer))
    {
        bufferedoutputstream.write(buffer, 0 ,1000);
    }
    bufferedoutputstream.flush();
    bufferedoutputstream.close();
    inputstream.close();
}

2 个答案:

答案 0 :(得分:0)

根据JavaDocread(byte[] buffer)返回读取的字节数。如果没有更多字节要读取,则返回-1。

问题似乎在于:while(bytesRead == inputstream.read(buffer))。由于bytesRead的值为0,因此.read方法将产生1024.将其更改为类似的方法应该有效:while(inputstream.read(buffer) != -1)

答案 1 :(得分:0)

你有:

int bytesRead = 0;

while(bytesRead == inputstream.read(buffer))
{
   ...
}

这相当于:

while(0 == inputstream.read(buffer))
{
   ...
}

该条件通常为false,循环将永远不会执行。你可能意味着更像这样的东西:

int bytesRead;

while((bytesRead = inputstream.read(buffer)) > 0)
{
   ...
}

这里的道德是:在这些类型的陈述中注意你的===


顺便说一句:无论读取多少字节,每次通过循环都会向输出文件写入1000个字节。实际上,您只想写入已读取的内容(有时read()可能无法读取完整缓冲区,尤其是在文件末尾,如果缓冲区大于剩余数据)。你想要这样做:

while((bytesRead = inputstream.read(buffer)) > 0)
{ 
    bufferedoutputstream.write(buffer, 0, bytesRead);
}