1. URL
classe
Nous avons étudié le travail avec les flux d'E/S. Nous avons étudié le travail avec des fichiers. Que devrions-nous étudier ensuite ? Qu'en est-il de travailler avec le réseau, y compris Internet ? Cela semble prometteur, n'est-ce pas ?
En Java, travailler avec Internet n'est pas plus difficile que travailler avec des fichiers. Eh bien, peut-être juste un peu.
Pour travailler avec les ressources Internet, Java a une classe spéciale — URL
. C'est aussi simple qu'un tabouret, comme vous le verrez maintenant.
Obtenir une page Web
Combien de lignes de code pensez-vous devoir écrire pour télécharger un fichier texte depuis Internet et afficher son contenu à l'écran ? dix? 100 ? 1000 ? Ou peut-être 5 ?
Code | Note |
---|---|
|
Crée un objet URL avec le chemin d'accès à la page Obtient un InputStream à partir de l'objet URL Lit tous les octets et renvoie un tableau d'octets Convertit le tableau en chaîne Affiche la chaîne |
Le contenu d'un fichier HTML s'affichera à l'écran :
Sortie console |
---|
|
Comparer le travail avec File
etURL
URL
est similaire à File
ou Path
, mais Path
stocke le chemin d'accès à une ressource dans le système de fichiers et URL
stocke le chemin d'accès à une ressource sur Internet.
Toute la magie opère lorsque nous obtenons un InputStream
objet grâce à un seul appel à la openStream()
méthode. C'est un objet ordinaire, et nous l'avons déjà étudié de fond en comble. Tout devient évident après avoir récupéré l' InputStream
objet. Après tout, nous savons déjà comment en extraire des données.
Regardez : seules les deux premières lignes sont différentes, et seulement légèrement. Et maintenant vous pouvez le voir - l'avantage de la standardisation et du travail avec des chaînes de flux de données :
Travailler avec Internet | Travailler avec un fichier |
---|---|
|
|
2. URLConnection
classe
En plus de simplement lire des données sur Internet, nous pouvons également télécharger des données. Télécharger des données est beaucoup plus compliqué que de les lire. Vous allez avoir besoin de quelques méthodes supplémentaires. Par exemple:
Code | Note |
---|---|
|
Créer un objet URL avec le chemin d'accès à la page Créer une connexion bidirectionnelle Obtenir un flux de sortie Mettre des données dedans Obtenir un flux d'entrée Lire des données à partir de celui-ci |
Notez que nous n'appelons plus la url.openStream()
méthode ici. Au lieu de cela, nous prenons un itinéraire plus long :
- Nous établissons d'abord une connexion bidirectionnelle stable en utilisant la
URLConnection.openConnection()
méthode - Ensuite, nous obtenons un flux pour envoyer des données en utilisant la
connection.getOutputStream()
méthode et envoyer des données au serveur - Ensuite, nous obtenons un flux pour lire les données à l'aide de la
connection.getInputStream()
méthode et commençons à lire les données à partir de celui-ci.
La gestion des ressources
À proprement parler, nous devrions encapsuler tous les flux dans un try-with-resources
bloc pour une manipulation en toute sécurité. Et cela ne ferait pas de mal d'envelopper le nu InputStream
et OutputStream
dans quelque chose de plus pratique. Par exemple, dans PrintStream
et BufferedReader
.
Si nous faisons tout cela, alors notre code ressemblera à ceci :
URL url = new URL("https://codegym.cc");
URLConnection connection = url.openConnection();
// Send data
try (OutputStream output = connection.getOutputStream();
PrintStream sender = new PrintStream(output))
{
sender.println("Hello");
}
// Read data
try(InputStream input = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input)))
{
while (reader.ready())
System.out.println(reader.readLine());
}
3. Exemples de travail avec le réseau
Téléchargeons quelque chose à partir d'Internet. Et ne vous contentez pas de le télécharger, mais enregistrez-le sur le disque.
Par exemple, écrivons un programme qui enregistre une image de la page d'accueil de Google sur le disque.
En principe, il n'y a rien de compliqué ici. Dans sa forme la plus simple, ce code ressemblerait à ceci :
Enregistrer un fichier sur disque |
---|
|
À l'aide des trois premières lignes, nous recevons un flux de données d'une ressource Internet - à partir d'une image.
Dans la quatrième ligne, nous créons le nom du fichier dans lequel nous allons enregistrer l'image. Le nom peut être n'importe quoi, mais l'extension du fichier doit correspondre à l'extension de l'image sur Internet. Cela permettra aux visionneuses d'images locales de l'ouvrir correctement.
Et enfin, la dernière ligne est l'une des méthodes Files
de la classe copy
. La Files
classe en compte plusieurs. Cette méthode, que nous avons utilisée, prend un flux d'octets ( InputStream
) comme premier paramètre et comme deuxième paramètre — le nom du fichier dans lequel les données doivent être écrites.
Théoriquement, si le URL
de l'image était court, alors ce code pourrait même être écrit en une seule ligne :
Copier des données d'un flux vers un fichier |
---|
|
Bien sûr, vous n'êtes pas obligé de l'écrire comme ça, mais cet exemple montre à quel point les flux d'E/S sont pratiques et puissants en Java.