亲爱的,我写了一些代码来下载文件并将其放在桌面上。
但是每当它开始下载时,它只保持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();
}
答案 0 :(得分:0)
根据JavaDoc,read(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);
}