计算目录中的图像

时间:2012-04-18 01:27:53

标签: java file count detect

我想要计算目录中有多少图像。我有一些来自互联网的代码的副本,可以检测目录中的总文件。

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 个答案:

答案 0 :(得分:5)

更改此

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实现

答案 1 :(得分:4)

请参阅File.listFiles(FilenameFilter)等方法。创建FilenameFilter并将父目录作为File后,可以使用..获取计数。

int filesOfInterest = parentDir.listFiles(textAndJpegFilenameFilter).length;

答案 2 :(得分:1)

您需要的是一种数据结构,可用于存储每个扩展名的文件数。 Map<String /*extension*/, Integer /*count*/>将是一个不错的选择。

对于每个文件,您将首先将其扩展名确定为名称中最后一个.之后的所有内容。然后检查地图是否有该扩展名的条目。如果存在,则将其递增1,如果不是,则创建计数为1的新条目。

当然,这将告诉您每个扩展程序的文件数量,找到您需要知道哪些扩展程序将具有图像文件的图像数量,这几乎是不可能的。

答案 3 :(得分:1)

以下方法是检查MIME类型的方法:

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

查看此帖子了解详情:Getting A File's Mime Type In Java

即使并非所有类型的文件都有MIME类型,我认为它也能解决您的问题。 通过这种方式,您可以确保它是一张图片并继续计算。

希望它有所帮助! = d