Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 下载的文件有0个字节_Java_File_Download - Fatal编程技术网

Java 下载的文件有0个字节

Java 下载的文件有0个字节,java,file,download,Java,File,Download,我正试图将.mp3音乐文件从下载到项目根目录,但下载的文件大小始终为0字节(为空)。下载也会立即停止 我正在使用以下代码: import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import org.apache.commons.io.FileUtils; public class MusicDownloader { pu

我正试图将
.mp3
音乐文件从下载到项目根目录,但下载的文件大小始终为0字节(为空)。下载也会立即停止

我正在使用以下代码:

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import org.apache.commons.io.FileUtils;

public class MusicDownloader
{
    public static void main(String[] arguments) throws MalformedURLException, IOException
    {
        download("https://www.youtube.com/audiolibrary_download?vid=d0a68933f592c297", "Ponies and Balloons");
    }

    public static void download(String url, String fileName) throws MalformedURLException, IOException
    {
        FileUtils.copyURLToFile(new URL(url), new File(fileName + ".mp3"));
    }
}
在浏览器中,手动下载文件可以完美地工作。来自另一个网站的下载链接,例如代码处理时没有问题。这里有什么问题


也不起作用。

因为它是非法的,而且是违法的

Youtube特别屏蔽了从他们的网站下载mp3的大多数通用方式。一个简单的10行代码行不通,否则盗版会比现在更严重


如果他们抓到你,你将被阻止。问题实际上是你的URL
https://www.youtube.com/audiolibrary_download?vid=d0a68933f592c297
。它实际上发出了一个重定向作为资源临时移动-301状态代码。因此,您需要选择它的新
URL
。我尝试使用它
HttpURLConnection
查看新重定向的url是否为
https://youtube-audio-library.storage.googleapis.com/d0a68933f592c297
。您可以使用以下代码:-

String urlString = "https://www.youtube.com/audiolibrary_download?vid=d0a68933f592c297";
        URL url = new URL(urlString);
        HttpURLConnection huc = (HttpURLConnection)url.openConnection();
        int statusCode = huc.getResponseCode(); //get response code
        if (statusCode == HttpURLConnection.HTTP_MOVED_TEMP
                || statusCode == HttpURLConnection.HTTP_MOVED_PERM){ // if file is moved, then pick new URL
            urlString = huc.getHeaderField("Location");
            url = new URL(urlString);
            huc = (HttpURLConnection)url.openConnection();
        }
        System.out.println(urlString);  
        InputStream is = huc.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        FileOutputStream fos = new FileOutputStream("test.mp3");
        int i = 0;
        while ((i = bis.read()) != -1)
            fos.write(i);

您可以检查的相同效果在
FileUtils
中是否可用。我相信,应该是这样。干杯:)

不,这不是因为任何人都可以下载他们的免费音频库。他们甚至在这里自己提供下载链接:使用第三方程序/替代方法是非常必要的。这就是链接的目的,我真的不想点击下载100次。他们本应该想办法下载所有的东西,这就是我要做的我喜欢你的个人资料页上的个人资料,但是,你的答案是完全正确的incorrect@BullyWiiPlaza你为什么不在Youtube工作告诉他们我还没查过,但有可能是Youtube正在执行重定向,而Apache Commons IO没有遵循它们。@Powerlord:您建议使用哪种代码/方法来考虑/检测重定向?您太棒了,先生!我得到了状态代码
303请参见其他
,因此我必须调整您的代码,但它可以工作;)@我很高兴这有帮助:)非常感谢你的回答@AnkitNigam。我遇到了同样的问题,URL被重定向,您的代码工作得很好。@evaldeslacasa很高兴它起了作用:)