文件学习笔记

File类

一、概述

java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

二、使用

1、构造方法

public File(String pathname)//通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
public File(String parent,String child)//从父路径名字符串和子路径名字符串创建新的File实例
    -好处:父路径和子路径,可以单独书写,使用起来非常灵活;父路径和子路径都可以变化
        :可以理解为 这个文件所在的路径,与这个文件的名字或其下的文件夹名字
public File(File parent,String child)//从父抽象路径名和子路径名字符串创建新的 File实例。
	-好处1:父路径和子路径,可以单独书写,使用起来非常灵活;父路径和子路径都可以变化
         2:父路径是File类型,可以使用File的方法对路径进行一些操作,再使用路径创建对象
         :可以理解为一个文件对象(应该只可以是文件夹),与另一个路径(文件、文件夹)

2、常用方法

(1)获取功能的方法

public string getAbsolutePath()//返回此File的绝对路径名字符串。
public String getPath()//将此File转换为路径名字符串。
public string getName()//返回由此File表示的文件或目录的名称。
public long length()//返回由此File表示的文件的长度。
    -获取的是构造方法指定的文件的大小,以 字节 为单位
    -注意:
        文件夹是没有大小概念的。
        如果构造方法中给出的路径不存在,那么Length方法返回 0

(2)判断功能的方法

public boolean exists()//此File表示的文件或目录是否实际存在。
public boolean isDirectory()//此File表示的是否为目录。
public boolean isFile()//此File表示的是否为文件。

(3)创建删除功能的方法

public boolean createNewFile()//当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。
public boolean delete()//删除由此File表示的文件或目录。
    -返回值:布尔值
       -true:文件/文件夹删除成功,返回true
       -false:文件夹中有内容,不会删除返回false;构造方法中路径不存在false
    -注意:
       -delete方法是直接在硬盘删除文件/文件夹,不走回收站,删除要谨慎
public boolean mkdir()//创建由此File表示的目录。
public boolean mkdirs()//创建由此File表示的目录,包括任何必需但不存在的父目录。

(4)目录的遍历

public String[] list()//返回一个String数组,表示该File目录中的所有子文件或目录(包括隐藏)。
public File[] listFiles()//返回一个File数组,表示该File目录中的所有的子文件或目录(包括隐藏)。
    -注意:
	   -list方法和ListFiles方法遍历的是构造方法中给出的目录
       -如果构造方法中给出的目录的路径不存在,会抛出空指针异常
       -如果构造方法中给出的路径不是一个目录,也会抛出空指针异常

三、文件过滤器

在FiLe类中有两个和 listFiles( ) 重载的方法,方法的参数传递的就是过滤器

  1. File[ ] listFiles (FileFilter filter)

    java.io.FileFilter接口 : 用于抽象 路径名(FiLe对象)的过滤器。

    • 作用:用来过滤文件(FiLe对象)
    • 抽象方法 : 用来过滤文件的方法
      • boolean accept(File pathname)测试指定抽象路径名是否应该包含在某个路径名列表中。
    • 参数 :
      • File pathname : 使用ListFiles方法遍历目录,得到的每一个文件对象
  2. File[] listFiles (FiLenameFiLter filter)

    java.io.FilenameFilter接口 : 实现此接口的类实例可用于过滤器文件名。

    • 作用 : 用于过滤文件名称
    • 抽象方法 : 用来过滤文件的方法
      • boolean accept(File dir,String name)测试指定文件是否应该包含在某一文件列表中。
    • 参数 :
      • File dir : 构造方法中传递的被遍历的目录, [ 这个文件对象所在的目录,不包含这个文件的名称 ]
      • String name : 使用ListFiles方法遍历目录,获取的每一个文件/文件夹的名称, [ 这个文件的名称 ]
  3. 注意 :

    • 两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则

例子:

(1)、FileFilterImpl

/**
 * @ClassName:FileFilterImpl
 * @创建者: LLY
 * @创建时间: 2021/5/8 19:20
 * @version: 1.0
 * @描述: FileFilter 文件过滤器
 */
public class FileFilterImpl implements FileFilter {

    private String type;

    public FileFilterImpl(String type) {
        this.type = type;
    }

    @Override
    public boolean accept(File file){
        return file.getName().toLowerCase().endsWith(this.type) || file.isDirectory();
    }
}

(1)、实验类

public class RecursionFile3 {

    public static void main(String[] args) {
        File file = new File("G:\\pycharm-workspace\\爬虫_数据分析");
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入要查找的文件类型:");
        String type = scanner.next();
        gerAllFiles1(file,type);
        scanner.close();
    }

    //FileFilter接口 文件过滤器 以匿名内部类的形式1
    //accept(File file)
    public static void gerAllFiles1(File file,String type){
        File[] files = file.listFiles(new FileFilter() {
            //FileFilter接口 文件过滤器
            @Override
            public boolean accept(File file) {
                return file.getName().toLowerCase().endsWith(type) || file.isDirectory();
            }
        });
        for (File file1 : files) {
            if (file1.isDirectory())
                gerAllFiles1(file1,type);
            else
                System.out.println(file1);
        }

    }

    //FileFilter接口 文件过滤器 以外部类的形式
    public static void gerAllFiles2(File file,String type){
        File[] files = file.listFiles(new FileFilterImpl(type));
        for (File file1 : files) {
            if (file1.isDirectory())
                gerAllFiles2(file1,type);
            else
                System.out.println(file1);
        }

    }

    //FilenameFilter接口 文件过滤器 以匿名内部类的形式2
    //accept(File file, String s)
    public static void gerAllFiles3(File file,String type){
        File[] files = file.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File file, String s) {
                return new File(file, s).isDirectory()||s.toLowerCase().endsWith(type);
            }
        });
        for (File file1 : files) {
            if (file1.isDirectory())
                gerAllFiles3(file1,type);
            else
                System.out.println(file1);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值