web-dev-qa-db-fra.com

Lire tout le fichier html sur String?

Existe-t-il de meilleures méthodes pour lire un fichier HTML entier avec une seule variable chaîne 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) {
    }
34
membersound

Il y a le IOUtils.toString(..) utility de Apache Commons. 

Si vous utilisez Guava, il existe également Files.readLines(..) et Files.toString(..)

25
Johan Sjöberg

Vous devriez utiliser 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();
23
Jean Logeart

Vous pouvez utiliser JSoup .
C’est un HTML parser très puissant pour Java 

5
SAbbasizadeh

Pour les opérations sur les chaînes, utilisez les classes StringBuilder ou StringBuffer pour accumuler des blocs de données de chaîne. N'utilisez pas d'opérations += pour les objets chaîne. La classe String est immuable et vous produirez une grande quantité d'objets string au moment de l'exécution et cela affectera les performances.

Utilisez plutôt la méthode .append() de l'instance de la classe StringBuilder/StringBuffer.

3
user784540

Je préfère utiliser Guava :


import com.google.common.base.Charsets;
import com.google.common.io.Files;
String content = Files.toString(new File("/path/to/file", Charsets.UTF_8)
3
jknair

Voici une solution pour récupérer le code HTML d'une page Web en utilisant uniquement les bibliothèques Java standard:

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

0
Pedro Lobito

Comme Jean l'a mentionné, utiliser une StringBuilder au lieu de += serait préférable. Mais si vous cherchez quelque chose de plus simple, Guava, IOUtils et Jsoup sont de bonnes options.

Exemple avec la goyave:

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

Exemple avec IOUtils:

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

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

Exemple avec Jsoup:

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

ou

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

REMARQUES:

Files.readLines() et Files.toString()

Celles-ci sont désormais obsolètes à partir de la version 22.0 de Guava (22 mai 2017). Files.asCharSource() doit être utilisé à la place de comme dans l'exemple ci-dessus. ( version 22.0 release diffs )

IOUtils.toString(InputStream) et Charsets.UTF_8

Déconseillé à partir de la version 2.5 d'Apache Commons-IO (6 mai 2016). IOUtils.toString doit maintenant recevoir la InputStreamet la Charset comme dans l'exemple ci-dessus. StandardCharsets de Java 7 doit être utilisé à la place de Charsetscomme dans l'exemple ci-dessus. ( caractères obsolètes .UTF_8 )

0
Kat