Hay mejores maneras de leer todo un archivo html a una sola variable de cadena que:

    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) {
    }
InformationsquelleAutor membersound | 2012-08-20

7 Comentarios

  1. 24

    Debe utilizar un 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();
    • para mí esto no funciona ya que todo el contenido html volver como una sola cadena y el en.readLine() acabo de leer todo el contenido de la primera llamada
    • ¿cómo se sabe dónde mypage.html se encuentra?
  2. 3

    Para las operaciones de cadena de uso de StringBuilder o StringBuffer clases para la acumulación de datos de la cadena de bloques. No utilice += operaciones para objetos string. String clase es inmutable y que va a producir una gran cantidad de objetos de cadena en tiempo de ejecución y va a afectar en el rendimiento.

    Uso .append() método de StringBuilder/StringBuffer instancia de la clase en su lugar.

  3. 3

    Me prefiere utilizar La guayaba :

    
    import com.google.common.base.Charsets;
    import com.google.common.io.Files;
    String content = Files.toString(new File("/path/to/file", Charsets.UTF_8)
     
    
    • Nota: a ) falta después de la ruta de archivo.
  4. 1

    Como Jean se ha mencionado, mediante un StringBuilder en lugar de += sería mejor. Pero si estás buscando algo más simple, Guayaba, IOUtils, y Jsoup son todas buenas opciones.

    Ejemplo con Guayaba:

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

    Ejemplo con IOUtils:

    InputStream in = new URL("/path/to/mypage.html").openStream();
    String content;
    
    try {
       content = IOUtils.toString(in, StandardCharsets.UTF_8);
     } finally {
       IOUtils.closeQuietly(in);
     }

    Ejemplo con Jsoup:

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

    o

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

    NOTAS:

    Files.readLines() y Files.toString()

    Que ahora están en desuso como de Guayaba versión 22.0 (22 de Mayo de 2017).
    Files.asCharSource() debe ser utilizado en lugar de como se ve en el ejemplo anterior. (versión 22.0 la liberación de los diffs)

    IOUtils.toString(InputStream) y Charsets.UTF_8

    Dejado de utilizarse a partir de Apache Commons-IO de la versión 2.5 (6 de Mayo de 2016). IOUtils.toString ahora debe ser aprobado el InputStream y la Charset como se ve en el ejemplo anterior. Java 7 StandardCharsets debe ser utilizado en lugar de Charsets como se ve en el ejemplo anterior. (obsoleto tipos de caracteres.UTF_8)

  5. 0

    He aquí una solución para recuperar el código html de una página web utilizando sólo el estándar de bibliotecas de java:

    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

Dejar respuesta

Please enter your comment!
Please enter your name here