使用Java下载文件

22

我写了一段代码来下载我制作的网络节目的某一集。它获取了该集的URL和保存位置。然而,它只下载了16MB并自动取消了下载。我不确定要改变哪个值才能增加这个限制。是否可能?请问有没有人能指点一下我正确的方向?谢谢!

下载代码:

    URL url = new URL(episode.getUrl());
    ReadableByteChannel rbc = Channels.newChannel(url.openStream());
    FileOutputStream fos = new FileOutputStream(episode.getLocalSave());
    fos.getChannel().transferFrom(rbc, 0, 1 << 24);

1
更多讨论,请参考可能是原始代码片段的后向引用https://dev59.com/9XNA5IYBdhLWcg3wh-cC#921400 - Donal Lafferty
2个回答

47

快速查看 transferFrom 的文档:

public abstract long transferFrom(ReadableByteChannel channel, long position, long count)

好的。

从原问题中得知,计数器的值为1<<24等于16M。

我猜这就是你问题的答案了 :-)


我现在感觉有点傻,谢谢!我真的从来没有想过去看文档,我的错。 - Ziddia
我对数学不是很擅长,尤其是因为我现在有点不舒服 - 请问有人可以告诉我如何将它增加到200MB,或者任何其他数量吗? :) - Ziddia
24
他最初犯错是因为这个极其受欢迎的 StackOverlow 答案,它给大家带来了麻烦:https://dev59.com/9XNA5IYBdhLWcg3wh-cC。 - Ben McCann
请参考这个答案来更简单地下载文件。 - Stanley

4
这里有另一个解决方案:
import java.io.*;
import java.net.*;
public class DownloadFile
{

    public static void main(String args[]) throws IOException
    {

        java.io.BufferedInputStream in = new java.io.BufferedInputStream(new java.net.URL(episode.getUrl()).openStream());
        java.io.FileOutputStream fos = new java.io.FileOutputStream(episode.getLocalSave());
        java.io.BufferedOutputStream bout = new BufferedOutputStream(fos);
        byte data[] = new byte[1024];
        int read;
        while((read = in.read(data,0,1024))>=0)
        {
            bout.write(data, 0, read);
        }
        bout.close();
        in.close();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接