Возникли проблемы при чтении содержимого URL с использованием InputStream - PullRequest
0 голосов
/ 15 октября 2019

Итак, я запускаю приведенный ниже код, и он печатает "! DOCTYPE html". Как я могу получить содержимое URL, например html?

public static void main(String[] args) throws IOException {
        URL u = new URL("https://www.whitehouse.gov/");
        InputStream ins = u.openStream();
        InputStreamReader isr = new InputStreamReader(ins);
        BufferedReader websiteText = new BufferedReader(isr);
        System.out.println(websiteText.readLine());

    }

Согласно java doc https://docs.oracle.com/javase/tutorial/networking/urls/readingURL.html: "Когда вы запускаете программу, вы должны видеть, прокручивая вокно команд, команды HTML и текстовое содержимое из файла HTML, расположенного по адресу ".... Почему я не получаю это?

Ответы [ 3 ]

1 голос
/ 15 октября 2019

В вашей программе ваш цикл не поставлен .

   URL u = new URL("https://www.whitehouse.gov/");
    InputStream ins = u.openStream();
    InputStreamReader isr = new InputStreamReader(ins);
    BufferedReader websiteText = new BufferedReader(isr);
    String inputLine;
    while ((inputLine = websiteText.readLine()) != null){
        System.out.println(inputLine);
   }

  websiteText.close();
1 голос
/ 15 октября 2019

Вы читаете только одну строку текста. Попробуйте это, и вы увидите, что вы получите две строки:

System.out.println(websiteText.readLine());
System.out.println(websiteText.readLine());

Попробуйте прочитать это в цикле, чтобы получить весь текст.

0 голосов
/ 15 октября 2019

BufferedReader имеет метод с именем #lines () начиная с Java 8. Тип возврата #lines () - Stream. Чтобы прочитать весь сайт, вы можете сделать что-то вроде этого:

String htmlText = websiteText.lines()
  .reduce("", (text, nextLine) -> text + "\n" + nextLine)
  .orElse(null);
...