4

ディレクトリにある画像の数を数えたい。ディレクトリ内のファイル全体を検出できるインターネットからのコードのコピーがあります。

import java.io.*;

public class CountFilesInDirectory {
      public static void main(String[] args) {
            File f = new File("/home/pc3/Documents/ffmpeg_temp/");
            int count = 0;
            for (File file : f.listFiles()) {
                    if (file.isFile()) {
                            count++;
                    }
            }
            System.out.println("Number of files: " + count);
    }
}

jpg/txt のような特定のファイル タイプをカウントしたい。私は何をすべきか?

4

4 に答える 4

6

これを変える

if (file.isFile()) { 
  count++; 
} 

if (file.isFile() &&
    (file.getName().endsWith(".txt") || file.getName().endsWith(".jpg"))) { 
  count++; 
} 

このコードが行うことは、 で示されるエンティティfileが (ディレクトリではなく) 実際にファイルであるかどうかを確認するだけでなく、その名前が探している特定の拡張子で終わっているかどうかも確認しています。

注: String.toLowerCase() メソッドを使用して、比較前に名前をより正確に変換できます。

更新 (コメントに基づく): より OOP ソリューションの場合、java.io.FilenameFilterインターフェイスを実装し、そのインスタンスをに渡すf.listFiles()ことができます。これにより、コードをあまり繰り返さずに、プログラムの別の部分でそのフィルターを再利用できます。このアプローチを使用する場合、endsWithロジックをFilenameFilter実装に移動する必要があります

于 2012-04-18T01:30:57.320 に答える
4

などのメソッドを参照してくださいFile.listFiles(FilenameFilter)。が作成され、FilenameFilter親ディレクトリが としてFile取得されると、..

int filesOfInterest = parentDir.listFiles(textAndJpegFilenameFilter).length;
于 2012-04-18T04:51:28.527 に答える
1

必要なのは、各拡張子のファイル数を格納するために使用できるデータ構造です。Map<String /*extension*/, Integer /*count*/>良い選択でしょう。

各ファイルについて、最初に拡張子を.その名前の最後以降のすべてとして決定します。次に、マップにその拡張子のエントリがあるかどうかを確認します。存在する場合は 1 ずつ増やし、存在しない場合はカウント 1 で新しいエントリを作成します。

もちろん、これは拡張子ごとのファイル数を教えてくれます。画像の数を見つけるには、どの拡張子が画像ファイルを持っているかを知る必要がありますが、これはほとんど不可能です。

于 2012-04-18T01:30:55.573 に答える
1

MIME タイプを確認する方法は次のとおりです。

InputStream is = new BufferedInputStream(new FileInputStream(file));
mimeType = URLConnection.guessContentTypeFromStream(is);

詳細については、この投稿を確認してください: Java でファイルの MIME タイプを取得する

すべての種類のファイルにすべての MIME タイプが存在しない場合でも、問題は解決すると思います。 このようにして、それが画像であることを確認し、カウントを続けることができます。

それが役に立てば幸い!=D

于 2012-04-18T01:32:55.213 に答える