[java] 자바 코드 몇 줄로 문자열을 URL로 읽기
Groovy와 동등한 Java를 찾으려고합니다.
String content = "http://www.google.com".toURL().getText();
URL에서 문자열로 내용을 읽고 싶습니다. 그런 간단한 작업을 위해 버퍼 스트림과 루프로 코드를 오염시키고 싶지 않습니다. 아파치의 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);
}
답변
또는 Apache Commons IOUtils.toString(URL url)
또는 인코딩 매개 변수를 허용하는 변형을 사용하십시오.
답변
더 많은 시간이 지났으므로 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"));
}
답변
Java 9보다 더 좋은 방법이 있습니다.
URL u = new URL("http://www.example.com/");
try (InputStream in = u.openStream()) {
return new String(in.readAllBytes(), StandardCharsets.UTF_8);
}
원래 그루비 예제와 마찬가지로 콘텐츠가 UTF-8로 인코딩 된 것으로 가정합니다. (그보다 더 영리한 것이 필요하면 URLConnection을 작성하고이를 사용하여 인코딩을 파악해야합니다.)
답변
구아바를 사용한 추가 예 :
URL xmlData = ...
String data = Resources.toString(xmlData, Charsets.UTF_8);
답변
입력 스트림이 있다면 (Joe의 답변 참조) ioutils.toString (inputstream)도 고려하십시오.
http://commons.apache.org/io/api-1.4/org/apache/commons/io/IOUtils.html#toString(java.io.InputStream )