gpt4 book ai didi

java - 如何通过 HTTP 下载文件并将其内容存储在 Java 中的字符串中

转载 作者:行者123 更新时间:2023-11-29 06:25:49 29 4
gpt4 key购买 nike

如标题所示,我正在尝试通过 HTTP 下载文件并将其内容存储在字符串中。因此,我的方法是:

URL u = new URL("http://url/file.txt");

ByteArrayBuffer baf = new ByteArrayBuffer(32);
InputStream in = (InputStream) u.getContent();
BufferedInputStream bis = new BufferedInputStream(in);

int buffer;
while((buffer = bis.read()) != -1){
baf.append((byte)buffer);
}

bis.close();
in.close();

代码在尝试从流中读取时失败,报告流已关闭。

现在,如果您尝试通过浏览器访问该文件,它将不会作为文本提供,而是作为要下载的文件提供。

我还没有在网上搜索过这方面的任何信息,所以非常感谢您提供一些见解!

谢谢。

最佳答案

这里有一段代码可以为您做到这一点。除了您尝试执行的操作之外,它还能够处理 GZip 压缩(如果您使用 Accept-Encoding: gzip, deflate 在 header 中进行设置)并自动为您检测编码 (处理字符串所必需的)。

private InputStream prepareInputStream(String urlToRetrieve) throws IOException
{
URL url = new URL(urlToRetrieve);
URLConnection uc = url.openConnection();
if (timeOut > 0)
{
uc.setConnectTimeout(timeOut);
uc.setReadTimeout(timeOut);
}
InputStream is = uc.getInputStream();
// deflate, if necesarily
if ("gzip".equals(uc.getContentEncoding()))
is = new GZIPInputStream(is);

this.lastURLConnection = uc;
return is;
}
// detects encoding associated to the current URL connection, taking into account the default encoding
public String detectEncoding()
{
if (forceDefaultEncoding)
return defaultEncoding;
String detectedEncoding = detectEncodingFromContentTypeHTTPHeader(lastURLConnection.getContentType());
if (detectedEncoding == null)
return defaultEncoding;

return detectedEncoding;
}


public static String detectEncodingFromContentTypeHTTPHeader(String contentType)
{
if (contentType != null)
{
int chsIndex = contentType.indexOf("charset=");
if (chsIndex != -1)
{
String enc = StringTools.substringAfter(contentType , "charset=");
if(enc.indexOf(';') != -1)
enc = StringTools.substringBefore(enc , ";");
return enc.trim();
}
}
return null;
}


// retrieves into an String object
public String retrieve(String urlToRetrieve)
throws MalformedURLException , IOException
{
InputStream is = prepareInputStream(urlToRetrieve);
String encoding = detectEncoding();
BufferedReader in = new BufferedReader(new InputStreamReader(is , encoding));
StringBuilder output = new StringBuilder(BUFFER_LEN_STRING);
String str;
boolean first = true;
while ((str = in.readLine()) != null)
{
if (!first)
output.append("\n");
first = false;
output.append(str);
}
in.close();
return output.toString();
}

代码来自info.olteanu.utils.retrieve.RetrievePagePhramer project .

关于java - 如何通过 HTTP 下载文件并将其内容存储在 Java 中的字符串中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1427508/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com