如何将文件下载为浏览器

时间:2011-05-14 18:48:06

标签: java http file-io

如果我通过浏览器保存mp3文件,第三方库通常与他合作,如果我通过HTTP摇摆自己,那么由于没有正确编码,第三方库无法工作。

我使用此代码

HttpGet first = new HttpGet(url);

first.addHeader("Content-Type", "audio/mpeg");

HttpResponse response = httpclient.execute(first, localContext);
InputStream instream = response.getEntity().getContent();

StringBuilder sb = new StringBuilder();
BufferedReader r = new BufferedReader(new InputStreamReader(instream));
for (String line = r.readLine(); line != null; line = r.readLine()) {
    sb.append(line);
}

instream.close();
String textFile = sb.toString();

BufferedWriter out = new BufferedWriter(new FileWriter("test123.mp3"));
out.write(textFile);
out.close();

怎么了?

也许是编码

3 个答案:

答案 0 :(得分:6)

您使用Reader / Writer代替InputStream / OutputStream将二进制文件视为文本文件。 BufferedReader#readLine()吃CRLF字节。

直接将InputStream直接写入OutputStream,而无需将字节按摩到字符并返回并删除CRLF字节。您也不必再担心字符编码了。

InputStream input = response.getEntity().getContent();
OutputStream output = new FileOutputStream("test123.mp3");
byte[] buffer = new byte[1024];

for (int length = 0; (length = input.read(buffer)) > -1;) {
    output.write(buffer, 0, length);
}

output.close();
input.close();

另见:

答案 1 :(得分:0)

我认为您的问题依赖于您将文件编写为Character文件而不是二进制文件。请尝试阅读此http://www.java2s.com/Code/Java/File-Input-Output/TheuseofDataOutputStreamandDataInputStream.htm和此http://download.oracle.com/javase/1.4.2/docs/api/java/io/OutputStream.html

答案 2 :(得分:0)

不要读取二进制内容的字符串。不行。

这是我自己的免费开源替代品的强制性广告,可以自己搞乱HTTPClient或URLConnection。

Resty r = new Resty();
File f = r.bytes(url).save(new File("test123.mp3"));

Resty可在此处http://beders.github.com/Resty (免责声明:我是这个小方案项目的维护者)