File类(常用方法、遍历目录下的文件、listFiles()方法和删除文件及目录)

File类
File类的常用方法

Filie类常用的构造方法

File(String pathname)              //通过指定的一个字符串类型的文件路径来创建一个新的File对象
File(String parent,String child)  //通过指定的一个字符串类型的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象
File(File parent,String child)    //根据指定的File类的父路径和字符串类型的子路径(包括文件的名称)创建一个File对象

File类常用的方法,如下代码:

package com.Put;
import java.io.*;

public class IO {
    public static void main(String[] args) throws Exception{

        //创建File对象
        File file = new File("example.txt");
        System.out.println("文件的名称:"+file.getName());
        System.out.println("文件的相对路径:"+file.getPath());
        System.out.println("文件的绝对路径:"+file.getAbsolutePath());
        System.out.println("文件的父路径:"+file.getParent());
        System.out.println(file.canRead() ? "文件可读" : "文件不可读");
        System.out.println(file.canWrite() ? "文件可写" : "文件不可写");
        System.out.println(file.isFile() ? "是一个文件" : "不是一个文件");
        System.out.println(file.isDirectory() ? "是一个目录" : "不是一个目录");
        System.out.println(file.isAbsolute() ? "是绝对路径" : "不是绝对路径");
        System.out.println("最后修改时间为:"+file.lastModified());
        System.out.println("文件大小为:"+file.length()+"byte");
        
    }
}

运行结果为:

文件的名称:example.txt
文件的相对路径:example.txt
文件的绝对路径:E:\Idea\JavaSE\example.txt
文件的父路径:null
文件可读
文件可写
是一个文件
不是一个目录
不是绝对路径
最后修改时间为:1628167368489
文件大小为:4byte
遍历目录下的文件
  • File类中有一个list()方法,用于遍历某个指定目录下的所有文件的名称,代码如下:
package com.Put;
import java.io.*;
import java.util.Arrays;

public class IO {
    public static void main(String[] args) throws Exception{

        //创建File对象
        File file = new File("E:\\Idea\\JavaSE\\重新学习");
        //判断是否时目录
        if (file.isDirectory()){
            //获取目录下的所有文件的名称
            String[] fileNames = file.list();
            //对指定路径下的文件或目录进行遍历
            Arrays.stream(fileNames).forEach(f -> System.out.println(f));
        }
    }
}

效果展示:

在这里插入图片描述

简述:最后通过数组工具类Arrays的stream()方法将数组先转换为Stream流并进行遍历,依次打印出每个文件的文件名

获取指定路径下的文件:

File类提供了一个重载的list(FilenameFilter filter)方法,该方法接收一个FilenameFilter接口类型的参数。FilenameFilter是一个函数式接口,被称作文件过滤器,接口中定义了一个抽象方法accept(File dir,String name)用于依次对指定的File的所有子目录或文件进行迭代。在调用list(FilenameFilter filter)方法时,需要实现过滤器FilenameFilter,并在accept(File dir,String name)方法中进行筛选,从而获得指定类型的文件

package com.Put;
import java.io.*;
import java.util.Arrays;

public class IO {
    public static void main(String[] args) throws Exception{

        //创建File对象
        File file = new File("E:\\Idea\\JavaSE\\重新学习\\src");
        //File file = new File("E:\\Idea\\JavaSE\\重新学习\\src\\com\\Demo01");
        //判断是否时目录
        if (file.isDirectory()){
            //获取目录下的所有文件的名称
            String[] fileNames = file.list(((dir, name) -> name.endsWith(".txt")));
            //String[] fileNames = file.list(((dir, name) -> name.endsWith(".java")));
            //对指定路径下的文件或目录进行遍历
            Arrays.stream(fileNames).forEach(f -> System.out.println(f));
        }
    }
}

运行结果:

在这里插入图片描述

在这里插入图片描述

简述:

调用list(FilenameFilter filter)方法时传入了一个lambda表达式形式的参数,该参数实现了函数式接口filenameFilter中的accept(File dir,String name)方法,然后数组工具类Arrays的stream()方法将数组先转换为Stream流并进行遍历

listFiles()方法返回一个File对象的数组,当对数组中的元素进行遍历时,如果元素中有子文件需要遍历,则可以使用"“递归”"再次遍历子目录

代码如下:

package com.Put;
import java.io.*;

public class IO {
    public static void main(String[] args) throws Exception {

        //创建File对象
        File file = new File("E:\\Idea\\JavaSE\\重新学习");
        //调用fileDir方法,遍历目录
        fileDir(file);
        
        }

    //遍历目录及其子目录
    public static void fileDir(File file){

        //获取目录下所有的文件,并赋给数组
        File[] listFiles = file.listFiles();
        //循环遍历数组
        for (File files:
             listFiles) {
            //如果遍历的时目录,则递归调用fileDir()方法
            if (files.isDirectory()){
                fileDir(files);
            }
            //输出文件的路径
            System.out.println(files);

        }
    }

}

简述:

定义了一个静态方法fileDir()用于接收一个目录下的File对象。在方法中,首先通过调用listFiles()方法把该目录下所有子文件和文件存到一个File类型的数组listFiles中,接着遍历数组listFiles并对当前遍历的File对象进行判断,如果是目录就递归调用fileDir()方法进行子目录遍历,如果是文件就直接打印输出文件的路径,这样该目录下的所有子文件就被成功遍历出来了

删除文件及目录

不要尝试,跟遍历目录下的文件原理差不多,了解即可

package com.Put;
import java.io.*;

public class IO {
    public static void main(String[] args) throws Exception {

        //创建File对象
        File files = new File("E:\\Idea\\JavaSE\\重新学习");
        //调用deleteDir方法
        deleteDir(files);

        }

    //删除方法
    public static void deleteDir(File files){

        //获取File对象中所有的文件,并赋给数组
        File[] listFiles = files.listFiles();
        //循环遍历数组
        for (File file:
             listFiles) {
            //如果遍历的时目录,则递归调用deleteDir方法
            if (files.isDirectory()){
                deleteDir(file);
            }
            //如果是文件,则删除
            file.delete();
        }
        //删除文件夹内的所有文件后,再删除文件夹
        files.delete();
        
    }

}
  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等慢慢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值