[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 )