3 votes

Programme Java permettant de télécharger des images à partir d'un site web et d'afficher la taille des fichiers

Je suis en train de créer un programme Java qui va lire un document html à partir d'une URL et afficher les tailles des images dans le code. Je ne sais pas trop comment m'y prendre pour y parvenir.

Je n'ai pas besoin de télécharger et d'enregistrer les images, j'ai juste besoin des tailles et de l'ordre dans lequel elles apparaissent sur la page web.

par exemple : une page web contient 3 images

<img src="dog.jpg" /> //which is 54kb
<img src="cat.jpg" /> //which is 75kb
<img src="horse.jpg"/> //which is 80kb

J'ai besoin que la sortie de mon programme java s'affiche

54kb
75kb
80kb

Des idées pour commencer ?

p.s. Je suis un peu novice en Java.

3voto

Kirill Kulakov Points 1975

Vous devriez diviser votre problème en trois sous-problèmes

  1. Télécharger le document HTML
  2. Analyse du code HTML et trouver les images
  3. Télécharger les images y déterminer sa taille

3voto

threadswarm Points 101

Si vous êtes novice en Java, vous pouvez utiliser une bibliothèque existante pour vous faciliter la tâche. Jsoup vous permet de récupérer une page HTML et d'en extraire les éléments à l'aide de sélecteurs de style CSS.

Il s'agit simplement d'une très Je pense qu'il montre à quel point Jsoup peut rendre une telle tâche facile. Veuillez noter que la gestion des erreurs et des codes de réponse a été omise, je voulais simplement transmettre l'idée générale :

Document doc = Jsoup.connect("http://stackoverflow.com/questions/14541740/java-program-to-download-images-from-a-website-and-display-the-file-sizes").get();

Elements imgElements = doc.select("img[src]");
Map<String, String> fileSizeMap = new HashMap<String, String>();

for(Element imgElement : imgElements){
    String imgUrlString = imgElement.attr("abs:src");
    URL imgURL = new URL(imgUrlString);
    HttpURLConnection httpConnection = (HttpURLConnection) imgURL.openConnection();
    String contentLengthString = httpConnection.getHeaderField("Content-Length");
    if(contentLengthString == null)
        contentLengthString = "Unknown";

    fileSizeMap.put(imgUrlString, contentLengthString);
}

for(Map.Entry<String, String> mapEntry : fileSizeMap.entrySet()){
    String imgFileName = mapEntry.getKey();
    System.out.println(imgFileName + " ---> " + mapEntry.getValue() + " bytes");
}

Vous pouvez également envisager de consulter Apache HttpClient . Je la trouve généralement préférable à l'approche URLConnection/HttpURLConnection brute.

1voto

Antonio Points 2291

Vous pouvez utiliser des expressions régulières pour trouver la balise et obtenir l'URL de l'image. Ensuite, vous aurez besoin d'une classe HttpUrlConnection pour obtenir les données de l'image et mesurer sa taille.

1voto

Majid L Points 5467

Vous pouvez le faire :

try {
    URL urlConn = new URL("http://yoururl.com/cat.jpg");
    URLConnection urlC = urlConn.openConnection();
    System.out.println(urlC.getContentLength());
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X