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) {
}
Il y a le IOUtils.toString(..)
utility de Apache Commons.
Si vous utilisez Guava
, il existe également Files.readLines(..)
et Files.toString(..)
.
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();
Vous pouvez utiliser JSoup .
C’est un HTML parser
très puissant pour Java
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.
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)
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);
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()
etFiles.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)
etCharsets.UTF_8
Déconseillé à partir de la version 2.5 d'Apache Commons-IO (6 mai 2016). IOUtils.toString
doit maintenant recevoir la InputStream
et la Charset
comme dans l'exemple ci-dessus. StandardCharsets
de Java 7 doit être utilisé à la place de Charsets
comme dans l'exemple ci-dessus. ( caractères obsolètes .UTF_8 )