web-dev-qa-db-fra.com

Charger et afficher toutes les images d'un dossier

Je veux lire toutes les images d'un dossier en utilisant Java.

Quand: j'appuie sur un bouton de l'application Java,
Cela devrait:

  • demander le chemin du répertoire dans un popup,
  • then charge toutes les images de ce répertoire,
  • then affiche leurs noms, types de dimension et taille.

La façon de procéder?

J'ai le code pour lire l'image et aussi pour toutes les images du dossier, mais comment faire ce que j'ai dit ci-dessus?

Toute suggestion ou aide est la bienvenue! S'il vous plaît fournir des liens de référence!

14
kundanraj

Untested car pas sur une machine sur laquelle un JDK est installé, alors ne vous inquiétez pas, c'est tout ce que vous saisissez "tel quel", mais vous devez commencer (attendez-vous à une vague de votes négatifs ...)

Chargement de toutes les images d'un dossier

import Java.awt.image.BufferedImage;
import Java.io.File;
import Java.io.FilenameFilter;
import Java.io.IOException;
import javax.imageio.ImageIO;

public class Test {

    // File representing the folder that you select using a FileChooser
    static final File dir = new File("PATH_TO_YOUR_DIRECTORY");

    // array of supported extensions (use a List if you prefer)
    static final String[] EXTENSIONS = new String[]{
        "gif", "png", "bmp" // and other formats you need
    };
    // filter to identify images based on their extensions
    static final FilenameFilter IMAGE_FILTER = new FilenameFilter() {

        @Override
        public boolean accept(final File dir, final String name) {
            for (final String ext : EXTENSIONS) {
                if (name.endsWith("." + ext)) {
                    return (true);
                }
            }
            return (false);
        }
    };

    public static void main(String[] args) {

        if (dir.isDirectory()) { // make sure it's a directory
            for (final File f : dir.listFiles(IMAGE_FILTER)) {
                BufferedImage img = null;

                try {
                    img = ImageIO.read(f);

                    // you probably want something more involved here
                    // to display in your UI
                    System.out.println("image: " + f.getName());
                    System.out.println(" width : " + img.getWidth());
                    System.out.println(" height: " + img.getHeight());
                    System.out.println(" size  : " + f.length());
                } catch (final IOException e) {
                    // handle errors here
                }
            }
        }
    }
}

API utilisées

Ceci est relativement simple à faire et utilise uniquement les classes standard emballées dans JDK:

Ces sessions du Java Tutorial pourraient également vous aider:

Améliorations possibles

  • Utilisez Apache Commons FilenameUtils pour extraire les extensions de fichiers
  • Détecter des fichiers basés sur des types ou du contenu mime réels, et non sur des extensions
  • Je vous laisse le code d'interface utilisateur. Comme je ne sais pas s'il s'agit de devoirs ou non, je ne souhaite pas fournir une solution complète. Mais pour continuer:
    • Regardez une FileChooser pour sélectionner le dossier.
    • Je suppose que vous savez déjà comment créer des cadres/fenêtres/dialogues.
    • Lisez le Tutoriel JavaComment utiliser les icônes qui vous apprend à les afficher et les étiqueter.
  • J'ai laissé de côté quelques points à traiter:
    • Gestion des exceptions
    • Les dossiers avec des endigs maléfiques (disons que vous avez un dossier "TryMeIAmEvil.png")

En combinant tout ce qui précède, il est assez facile à faire.

42
haylem

javaxt.io.Directory directory = new javaxt.io.Directory ("C:\Utilisateurs\Public\Images\Exemples d'images"); directory.getFiles (); javaxt.io.File [] fichiers;

    Java.io.FileFilter filter = file -> !file.isHidden() && (file.isDirectory() || (file.getName().endsWith(".jpg")));
    files = directory.getFiles(filter, true);
    System.out.println(Arrays.toString(files));
0
Statenco