需求说明:
在一个文件夹内,查找占用磁盘空间最大的 jpg 文件,并输出文件大小
实现思路:
创建ImageFileFilter类实现FilenameFilter接口,且重写accept方法,该方法中对文件后缀.jpg进行判断
因涉及到比较文件大小操作,创建比较器类 FileComparator,实现 java.util.Comparator 接口,为该类添加泛型 File,并重写 compare(File file1,File file2) 方法,该方法的作用是对两个文件进行比较。
创建运行Java类,在main方法中定义File指向目录,调用listFiles方法,并且传入实例化的过滤对象得到文件数组
调用Arrays.sort方法传入数组及比较类对象,实现排序
输出数组中第一个元素即是文件最大的
实现代码:
文件过滤器类(ImageFileFiter)
import java.io.File; import java.io.FilenameFilter; public class ImageFileFiter implements FilenameFilter { @Override public boolean accept(File dir, String name) { //指定后缀名为.jpg的文件作为过滤条件 return name.endsWith(".jpg"); } }
比较器类(FileComparator)
import java.io.File; import java.util.Comparator; public class FileComparator implements Comparator { @Override public int compare(Object o1, Object o2) { File file1 = (File)o1; File file2 = (File)o2; if (file1.length()>file2.length()) { return -1; } else if (file1.length()<file2.length()) { return 1; }else{ return 0; } } }
启动器类(FindMaximumImageFile)
import java.io.File; import java.util.Arrays; public class FindMaximumImageFile { public static void main(String[] args) { //创建需要访问的目录对象 File directory = new File("D:\\YMJ\\E7篮球社\\JPG 预览图"); //根据创建的文件过滤对象,过滤出所有的jpg文件,返回一个file对象 File[] files = directory.listFiles(new ImageFileFiter()); //判断目录内是否有子文件或者子目录 if (files != null) { //使用创建的比较器,按照文件大小降序排序 Arrays.sort(files,new FileComparator()); //数组内的第一个元素就是占用磁盘空间最大的文件 File targetFile =files[0]; //打印出该文件的文件路径和文件大小 System.out.println("文件路径:"+targetFile.getAbsolutePath()); System.out.println("文件大小:"+targetFile.length()); } else { System.out.println("改文件内没有文件!"); } } }