【问题标题】:Having trouble reading in content of url using InputStream使用 InputStream 读取 url 内容时遇到问题
【发布时间】:2019-10-15 10:14:41
【问题描述】:

所以我运行下面的代码并打印“!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:“当您运行程序时,您应该会在命令窗口中滚动查看位于“....明白了吗?

【问题讨论】:

  • 您发布的代码与您引用的教程中的代码不同,因此没有理由让它的行为相同。

标签: java io inputstream bufferedreader inputstreamreader


【解决方案1】:

在你的程序中,你没有放 while 循环

   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();

【讨论】:

    【解决方案2】:

    您只阅读了一行文本。 试试这个,你会看到你得到两行:

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

    尝试循环阅读以获取所有文本。

    【讨论】:

      【解决方案3】:

      BufferedReader 从 Java 8 开始就有一个名为 #lines() 的方法。#lines() 的返回类型是 Stream。要阅读整个网站,您可以这样做:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-19
        • 1970-01-01
        • 2017-12-04
        • 1970-01-01
        • 2011-09-03
        • 2013-03-27
        • 1970-01-01
        相关资源
        最近更新 更多