我想要计算目录中有多少图像。我有一些来自互联网的代码的副本,可以检测目录中的总文件。
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。我该怎么办?
答案 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