web-dev-qa-db-ja.com

フォルダからすべての画像を読み込んで表示する

Javaを使用してフォルダー内のすべての画像を読みたい。

When: Javaアプリケーション、
それは:

  • ポップアップでディレクトリのパスを要求し、
  • thenこのディレクトリからすべての画像をロードし、
  • thenそれらの名前、次元タイプ、およびサイズを表示します。

どうやって進める?

画像を読み取るためのコードとフォルダー内のすべての画像のためのコードがありますが、上記で言ったことをどのように行うことができますか?

どんな提案や助けも大歓迎です!参照リンクを提供してください!

17
kundanraj

JDKがインストールされているマシンにはないため、テストされていません。「現状のまま」で入力してください。ただし、開始する必要があります(ダウン投票の急増が予想されます... )

フォルダからすべての画像をロードする

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

これは比較的簡単で、標準のJDKパッケージクラスのみを使用します。

Javaチュートリアル のこれらのセッションも役立ちます。

可能な拡張

  • Apache Commons FilenameUtilsを使用してファイルの拡張子を抽出する
  • 拡張子ではなく、実際のMIMEタイプまたはコンテンツに基づいてファイルを検出する
  • UIコードはあなたにお任せします。これが宿題かどうか分からないので、完全な解決策を提供したくありません。しかし続行するには:
    • FileChooserを見て、フォルダーを選択します。
    • 私はあなたがフレーム/ウィンドウ/ダイアログを作成する方法をすでに知っていると思います。
    • Javaチュートリアルアイコンの使用方法 セクションを読み、それらの表示とラベル付けの方法を説明します。
  • 対処する必要がある問題をいくつか省略しました:
    • 例外処理
    • Evil endigsのあるフォルダ(「TryMeIAmEvil.png」というフォルダがあるとします)

上記のすべてを組み合わせることで、それは非常に簡単です。

43
haylem

javaxt.io.Directory directory = new javaxt.io.Directory( "C:\ Users\Public\Pictures\Sample Pictures"); directory.getFiles(); javaxt.io.File []ファイル;

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