java IO中的File

File

File对象既可以表示文件,也可以表示目录。

列出目录下的文件和子目录名
Flle[] listFiles()
Flle[] listFiles(FileFilter filter)
Flle[] listFiles(FilenameFileter filter)

创建和删除目录
boolean mkdir() 创建当前File对象表示的目录;
boolean mkdirs() 创建当前File对象表示的目录,并在必要时将不存在的父目录也创建出来;
boolean delete() 删除当前File对象表示的目录,当前目录必须为空才能删除成功。

文件过滤

不使用java文件过滤器过滤文件示列:

public static void filter(File file, String filetype) {
    for (File f : file.listFiles()) {
        if (f.getName().endsWith(filetype)) {
            System.out.println(f.getPath());
        }
    }
}

java提供了文件过滤类FileFileter 和FilenameFileter可直接过滤文件,需要重写accept()方法
accept()方法返回的是一个布尔值:

  • true:将传递过去的File对象保存到File数组中(放行)
  • false:不将传递过去的File对象保存到File数组中

示列 过滤当前目录下某一类型文件:

File f = new File("C:\\windows");

//FileFilter
File[] files1 = f.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        return pathname.getName().endsWith("exe");
    }
});
System.out.println("FileFilter-----------"+files1.length);
for (File ff : files1) {
    System.out.println(ff);
}

//FilenameFilter
File[] files2 = f.listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        return name.endsWith("exe");
    }
});
System.out.println("FilenameFilter----------"+files2.length);
for(File ff : files2 ){
    System.out.println(ff);
}

以上只能遍历循环当前目录下的直接子目录,若想遍历当前目录所有的目录需要递归调用

示列:

/**
* 获取当前目录内包含所有的文件夹
* @param file
*/
public static void findAllDir(File file) {
    File[] f = file.listFiles();
    if (f != null) {
        for (File ff : f) {
            if (ff.isDirectory()) {
                System.out.println(ff.getPath());
                findAllDir(ff);
            }
        }
    }
}

static LinkedList<File> list = new LinkedList<>();
/**查找包括当前目录内所有指定类型的文件
* @param file 从哪个目录内遍历
* @param fileType 文件类型
*/
public static LinkedList<File> findAllFileInDir(File file, String fileType) {
    File[] fs = file.listFiles();
    if (fs != null) {
        for (File f : fs) {
            if (f.isDirectory()) {
                findAllFileInDir(f, fileType);
            }
            if (f.isFile() && f.getName().endsWith(fileType)) {
                filecount++;
                System.out.println(String.format("%d\t%.2f MB\t%s",filecount,getFileSize(f),f));
                list.add(f);
            }
        }
    }
    return list;
}

获取文件大小示例:

/**
    * 获取文件大小
    * @param f
    * @return
    */
public static double getFileSize(File f) {
    if (f.isFile()) {
        double size = f.length() / (Math.pow(1024, 2));
        return size;
    }
    return -1;
}

排序当前目录下所有指定类型的文件:

//先定义TreeSet怎样排序,需要重写compare()方法
public static TreeSet<File> ts = new TreeSet<>(new Comparator<File>() {
    @Override
    public int compare(File o1, File o2) {
        double i  = getFileSize(o1)-getFileSize(o2);
        int ii = i>=0? 1:-1;
        return -ii;
    }
});


/**
    * 排序当前目录下所有指定类型的文件
    * @param f
    * @param fileType
    * @return
    */
public static TreeSet<File> sortAllFile(File f, String fileType) {
    LinkedList<File> allFileInDir = findAllFileInDir(f, fileType); //使用之前写好的查找方法
    System.out.println("共查找到"+allFileInDir.size()+"个文件");
    ts.addAll(allFileInDir);
    for (File ff : ts) {
        filecount++;
        System.out.println(String.format("%d\t%.2f MB \t\t%s",filecount,getFileSize(ff),ff.getName()));
    }
    return ts;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值