我试图找到Java相当于Groovy的:
String content = "http://www.google.com".toURL().getText();
Run Code Online (Sandbox Code Playgroud)
我想将URL中的内容读入字符串.我不想用缓冲的流和循环来污染我的代码以完成这么简单的任务.我查看了apache的HttpClient,但我也没有看到一行或两行实现.
ccl*_*eve 122
既然原来的答案被接受了一段时间,那么有一个更好的方法:
String out = new Scanner(new URL("http://www.google.com").openStream(), "UTF-8").useDelimiter("\\A").next();
Run Code Online (Sandbox Code Playgroud)
如果您想要一个稍微全面的实现,这不是一行,请执行以下操作:
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() : "";
}
}
Run Code Online (Sandbox Code Playgroud)
Jos*_*man 95
这个答案指的是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);
}
}
Run Code Online (Sandbox Code Playgroud)
正如@extraneon所建议的那样,ioutils允许你以一种非常雄辩的方式做到这一点,这仍然是Java精神:
InputStream in = new URL( "http://jakarta.apache.org" ).openStream();
try {
System.out.println( IOUtils.toString( in ) );
} finally {
IOUtils.closeQuietly(in);
}
Run Code Online (Sandbox Code Playgroud)
小智 71
或者只是使用IOUtils.toString(URL url),或者也接受编码参数的变体.
Jea*_*sky 21
现在已经过了更多时间,这是在Java 8中实现它的一种方法:
URLConnection conn = url.openConnection();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
pageText = reader.lines().collect(Collectors.joining("\n"));
}
Run Code Online (Sandbox Code Playgroud)
Sea*_*lly 12
从Java 9开始,还有一种更好的方法:
URL u = new URL("http://www.example.com/");
try (InputStream in = u.openStream()) {
return new String(in.readAllBytes(), StandardCharsets.UTF_8);
}
Run Code Online (Sandbox Code Playgroud)
与原始的groovy示例一样,这假定内容是UTF-8编码的.(如果你需要比这更聪明的东西,你需要创建一个URLConnection并用它来计算编码.)
使用Guava的其他示例:
URL xmlData = ...
String data = Resources.toString(xmlData, Charsets.UTF_8);
Run Code Online (Sandbox Code Playgroud)
Java 11+:
URI uri = URI.create("http://www.google.com");
HttpRequest request = HttpRequest.newBuilder(uri).build();
String content = HttpClient.newHttpClient().send(request, BodyHandlers.ofString()).body();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
175458 次 |
| 最近记录: |