如何在不保存本地驱动器的情况下读取内存中的http文件?

时间:2016-01-20 08:50:16

标签: java

读取HTTP远程文件并将其保存到本地磁盘非常简单:

org.apache.commons.io.FileUtils.copyURLToFile(new URL("http://path/to.file"), new File("localfile.txt"));

但是我想读取一个文件而不必将其保存到磁盘上,只需将其保存在内存中并从那里读取即可。

这可能吗?

4 个答案:

答案 0 :(得分:4)

您可以使用java.net.URL#openStream()

InputStream input = new URL("http://pat/to.tile").openStream();
// ...

答案 1 :(得分:2)

很高兴看到您正在使用apache commons,您可以执行以下操作: -

final URL url = new URL("http://pat/to.tile");
final String content = IOUtils.toString(url.openStream(), "UTF-8"); // or your preferred encoding

或者,您可以只访问流并按照自己的意愿进行操作。如果您使用String,则不需要使用apache commons获取InputStreamReader,但由于您已经在使用,因此没有理由不这样做公地-IO

正如其他人所提到的,如果你只是想在内存中而不将流处理成String,只需要url.openStream()

答案 2 :(得分:0)

您可以这样做:

  public static String getContent(String url) throws Exception {
        URL website = new URL(url);
        URLConnection connection = website.openConnection();
        BufferedReader in = new BufferedReader(
                                new InputStreamReader(
                                    connection.getInputStream()));

        StringBuilder response = new StringBuilder();
        String inputLine;

        while ((inputLine = in.readLine()) != null) 
            response.append(inputLine);

        in.close();

        return response.toString();
    }

答案 3 :(得分:0)

如果您乐意介绍第三方库,那么OkHttp就有一个例子可以做到这一点。

OkHttpClient client = new OkHttpClient();

String url = "http://pat/to.tile";
Request request = new Request.Builder()
  .url(url)
  .build();

Response response = client.newCall(request).execute();
String urlContent = response.body().string();

该库还将解析并提供所有与HTTP协议相关的标题等。