37

有没有比以下更好的方法将整个 html 文件读取到单个字符串变量:

    String content = "";
    try {
        BufferedReader in = new BufferedReader(new FileReader("mypage.html"));
        String str;
        while ((str = in.readLine()) != null) {
            content +=str;
        }
        in.close();
    } catch (IOException e) {
    }
4

8 回答 8

28

IOUtils.toString(..)来自 Apache Commons 的实用程序。

如果你正在使用Guava还有Files.readLines(..)and Files.toString(..)

于 2012-08-20T09:39:25.980 回答
28

您应该使用StringBuilder

StringBuilder contentBuilder = new StringBuilder();
try {
    BufferedReader in = new BufferedReader(new FileReader("mypage.html"));
    String str;
    while ((str = in.readLine()) != null) {
        contentBuilder.append(str);
    }
    in.close();
} catch (IOException e) {
}
String content = contentBuilder.toString();
于 2012-08-20T09:42:16.230 回答
7

您可以使用JSoup。这对java
来说非常强大HTML parser

于 2012-08-20T09:43:18.770 回答
4

我更喜欢使用番石榴

import com.google.common.base.Charsets;
import com.google.common.io.Files;
File file = new File("/path/to/file", Charsets.UTF_8);
String content = Files.toString(file);
于 2012-08-20T09:46:42.687 回答
4

正如 Jean 所说,使用 aStringBuilder而不是+=会更好。但如果你正在寻找更简单的东西,Guava、IOUtils 和 Jsoup 都是不错的选择。

番石榴的例子:

String content = Files.asCharSource(new File("/path/to/mypage.html"), StandardCharsets.UTF_8).read();

IOUtils 示例:

InputStream in = new URL("/path/to/mypage.html").openStream();
String content;

try {
   content = IOUtils.toString(in, StandardCharsets.UTF_8);
 } finally {
   IOUtils.closeQuietly(in);
 }

Jsoup 示例:

String content = Jsoup.parse(new File("/path/to/mypage.html"), "UTF-8").toString();

或者

String content = Jsoup.parse(new File("/path/to/mypage.html"), "UTF-8").outerHtml();

笔记:

Files.readLines()Files.toString()

从 Guava 版本 22.0(2017 年 5 月 22 日)开始,这些现在已弃用。 如上例所示,Files.asCharSource()应改为使用。(版本 22.0 版本差异

IOUtils.toString(InputStream)Charsets.UTF_8

自 Apache Commons-IO 版本 2.5(2016 年 5 月 6 日)起已弃用。IOUtils.toString现在应该传递 theInputStream the Charset,如上例所示。StandardCharsets应该使用Java 7而不是Charsets 如上例所示。已弃用的 Charsets.UTF_8

于 2018-09-03T19:15:18.327 回答
3

对于字符串操作,使用 StringBuilder 或 StringBuffer 类来累积字符串数据块。不要+=对字符串对象使用操作。String类是不可变的,你会在运行时产生大量的字符串对象,它会影响性能。

请改用.append()StringBuilder/StringBuffer 类实例的方法。

于 2012-08-20T09:42:28.680 回答
0

这是仅使用标准 java 库检索网页 html 的解决方案:

import java.io.*;
import java.net.*;

String urlToRead = "https://google.com";
URL url; // The URL to read
HttpURLConnection conn; // The actual connection to the web page
BufferedReader rd; // Used to read results from the web page
String line; // An individual line of the web page HTML
String result = ""; // A long string containing all the HTML
try {
 url = new URL(urlToRead);
 conn = (HttpURLConnection) url.openConnection();
 conn.setRequestMethod("GET");
 rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
 while ((line = rd.readLine()) != null) {
  result += line;
 }
 rd.close();
} catch (Exception e) {
 e.printStackTrace();
}

System.out.println(result);

SRC

于 2018-11-21T21:37:53.460 回答
0
 import org.apache.commons.io.IOUtils;
 import java.io.IOException;     
    try {
               var content = new String(IOUtils.toByteArray ( this.getClass().
                        getResource("/index.html")));
            } catch (IOException e) {
                e.printStackTrace();
            }

//上面提到的 Java 10 代码 - 假设 index.html 在资源文件夹中可用。

于 2021-05-25T13:40:02.170 回答