Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从链接获得完整的视频下载?_Java - Fatal编程技术网

Java 如何从链接获得完整的视频下载?

Java 如何从链接获得完整的视频下载?,java,Java,我试图从一个链接下载一段视频,但它只下载了一小部分,所以根本无法观看。无论链接中的文件有多大,您如何下载整个视频 try { URL url; byte[] buf; int byteRead, byteWritten = 0; url = new URL(fAddress); outStream = new BufferedOutputStream(new FileOutputStream(destinat

我试图从一个链接下载一段视频,但它只下载了一小部分,所以根本无法观看。无论链接中的文件有多大,您如何下载整个视频

    try {
        URL url;
        byte[] buf;
        int byteRead, byteWritten = 0;
        url = new URL(fAddress);
        outStream = new BufferedOutputStream(new FileOutputStream(destinationDir + "\\" + localFileName));

        conn = url.openConnection();
        is = conn.getInputStream();
        buf = new byte[size];
        while ((byteRead = is.read(buf)) != -1) {
            outStream.write(buf, 0, byteRead);
            byteWritten += byteRead;
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            is.close();
            outStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

看起来服务器可能会将您重定向到代码无法处理的其他位置。要获得最终位置,可以尝试以下方法(基于:):

现在你只需要改变

url = new URL(fAddress);


您确定此链接包含整个视频文件吗?@Pshemo是肯定的。为什么它看起来应该可以工作?是的,它对我来说很好(除了我没有下载视频,而是其他10Mb文件)。@Pshemo我试过下载一个视频,我相信它是26mb,但它只下载了6006字节。嗯,可能我结束程序太早了。是否有一种方法可以在消息完成后打印它,因为它在我关闭它之前打印完成。(打印语句在while循环之后)将该打印语句放在循环之后应该可以,并表明您下载并存储了所有发送数据(假设在负责关闭文件的
finally
块中抛出了非异常)。这表明服务器可能故意向您发送损坏的文件,或者您没有使用正确的地址/头(可能需要记录您的日志,以便cookie可能很重要;或者服务器可能需要正确的用户代理).好的,它现在正在运行我希望我知道如何加载bar@J.Doe然后,请随意提出新问题(就在您确保还没有使用搜索查询(如:)提出新问题之后)它起作用了。我不会问如何在这个网站上创建加载栏,它会很快关闭。@J.Doe你说得对,我们不喜欢在这里询问代码。但是询问代码的问题是可以的。所以试着先写它(找到关于它的示例/文章)如果你遇到问题,你可以问一个新问题。如果你描述得很好,可能会有人愿意帮助你。现在我能说的是:(1)要获得你下载的文件的大小(以字节为单位),你可以使用
conn.getContentLengthLong()
(它将
内容长度
头的值返回为
long
),(2)下载的字节数已经是字节写入的,所以您只需要在每次迭代中更新进度条。
url = new URL(fAddress);
url = new URL(getFinalLocation(fAddress));