在几行java代码中读取url to string

问题

我试图找到Java相当于Groovy的:

String content = "http://www.google.com".toURL().getText();

我想将URL中的内容读入字符串。我不想用缓冲的流和循环来污染我的代码以完成这么简单的任务。我查看了apache的HttpClient,但我也没有看到一行或两行实现。


#1 热门回答(104 赞)

既然原来的答案被接受了一段时间,那么有一个更好的方法:

String out = new Scanner(new URL("http://www.google.com").openStream(), "UTF-8").useDelimiter("\\A").next();

如果你想要一个稍微全面的实现,这不是一行,请执行以下操作:

public static String readStringFromURL(String requestURL) throws IOException
{
    try (Scanner scanner = new Scanner(new URL(requestURL).openStream(),
            StandardCharsets.UTF_8.toString()))
    {
        scanner.useDelimiter("\\A");
        return scanner.hasNext() ? scanner.next() : "";
    }
}

#2 热门回答(91 赞)

这个答案指的是Java的旧版本。你可能想看看ccleve的答案。

以下是执行此操作的传统方法:

import java.net.*;
import java.io.*;

public class URLConnectionReader {
    public static String getText(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();
    }

    public static void main(String[] args) throws Exception {
        String content = URLConnectionReader.getText(args[0]);
        System.out.println(content);
    }
}

正如@extraneon所建议的,ioutils允许你以非常雄辩的方式执行此操作,这仍然是Java精神:

InputStream in = new URL( "http://jakarta.apache.org" ).openStream();

 try {
   System.out.println( IOUtils.toString( in ) );
 } finally {
   IOUtils.closeQuietly(in);
 }

#3 热门回答(63 赞)

或者只使用IOUtils.toString(URL url),或者也接受编码参数的变体。