我尝试下载youtube视频(使用与keepvid相同的链接)。我得到的文件比通过浏览器下载的文件大4kB,无法播放。任何人都可以告诉我为什么,我做错了什么? 此外,当我逐行打印两个文件时,它们显示相同的数据。我用于下载的代码如下。 感谢。
try {
URL hr= new URL("link");
URLConnection conn= hr.openConnection();
conn.setRequestProperty("Uzer-Agent", "Mozilla/5.0");
conn.connect();
BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream()));
File file=new File("video.flv");
PrintWriter pw=new PrintWriter(new FileWriter(file));
String line="";
while((line=br.readLine())!=null){
System.out.println(line);
pw.println(line);
}
pw.close();
} catch (Exception e){}
答案 0 :(得分:0)
您无法使用flv
等读取二进制文件(如readLine()
),就好像它们是文本文件一样。您必须分别使用read()
和write()
中未格式化的InputStream
和OutputStream
方法。
答案 1 :(得分:0)
是的,虽然阅读可能与br.readLine()
完成(不确定,我会用br.read( char[ 4096 ], off, len )
阅读,但用pw.println
撰写肯定是错误的,因为它在每行的末尾添加了一个换行符 - 你不想在二进制文件中看到它。
我会说它像
char[] buff = new char[ 4096 ];
int offset = 0;
while( -1 != br.read( buff, offset, 4096 ) ){
pw.write( buff );
offset += 4096;
}
您也可以在此处使用输入/输出流,因为您不需要进行字符转换。