在几行Java代码中读取字符串的url
我试图找到Java与Groovy的等价物:
String content = "http://www.google.com".toURL().getText();
我想将 URL 中的内容读取到字符串中。我不想为这样一个简单的任务用缓冲流和循环污染我的代码。我研究了apache的HttpClient,但我也没有看到一两行实现。
我试图找到Java与Groovy的等价物:
String content = "http://www.google.com".toURL().getText();
我想将 URL 中的内容读取到字符串中。我不想为这样一个简单的任务用缓冲流和循环污染我的代码。我研究了apache的HttpClient,但我也没有看到一两行实现。
现在,自原始答案被接受以来已经过去了一段时间,有一个更好的方法:
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() : "";
    }
}
						这个答案指的是旧版本的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);
 }