File类笔记

本文详细介绍了Java中的File类,包括路径与分割符、File类的构造方法、获取文件信息的方法、文件操作(创建、删除、重命名)以及文件夹操作。重点讲解了listFiles()方法用于获取目录下的文件或目录对象,并提到了如何结合FilenameFilter实现文件筛选。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.File类

  1. File 类可以描述一个文件或者文件夹。

1.什么是IO流:(Input Output)?

        IO流主要用于解决设备与设备之间的数据传输问题,比如 硬盘-->内存  内存-->硬盘 键盘-->内存等

1.1 IO流应用场景:

        导出报表,上传照片,下载,解释xml文件...

1.2数据的保存

        数据保存在内存上是临时的,数据保存在硬盘上是永久性保存,数据一般是已文件的形式保存在硬盘上的。

1.3 sun使用了 File类来描述文件或文件夹的

1.路径与分割符

1.1 目录分割符

  1. 在windows上的目录分割符是 \ ,在Linux上的目录分割符是 / 。
  2. 注意:在windows上面,\ 与 / 都可以作为目录分割符,而且如果写/的时候,写一个即可,不需要转义符

1.2 路径问题

  1. 绝对路径:文件在硬盘上的完整路径,一般以盘符开头(上下级目录用\\表示)
  2. 相对路径:相对路径就是资源文件相对于当前程序所在的路径

        注意:如果当前程序所在路径与资源文件路径不再同一盘符下边,是无法写相对路径的

    . 当前路径

    .. 上级路径

 

2、File类操作文件方法

2.1 File类的构造方法:

  1. File(String pathname)

              通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。

  1. File(File parent, String child)

              根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。

  1. File(String parent, String child)

              根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。

  1. File(URI uri)

              通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

2.2 File类获取文件信息的方法

注意:以下方法与文件存在与否无关,不存在也不会报错。

  1. getName():读取文件或文件夹的名称,不包含上级路径。
  2. getPath():返回绝对路径,可以是相对路径,但是目录要指定。
  3. getAbsolutePath()   :获取文件的绝对路径
  4. length():获取文件大小(字节),如果文件不存在或者是目录,返回0
  5. getParent():返回上级目录的路径名字符串,如果没有上级目录,返回null
  6. lastModified():返回最后一次被修改的时间

2.3 File类操作文件或目录的方法

  • createNewFile(path):创建新文件。在指定的位置创建一个新文件,创建成功返回true;如果文件存在返回false;如果父级目录不存在,抛出异常。
  • mkdir():创建单级目录。在指定的位置创建一个新目录,只创建最底层的目录。创建成功返回true;如果目录存在返回false;如果父级目录不存在,返回false
  • mkdirs():创建多级目录。在指定的位置创建一个新目录,创建多级目录。如果目录不存在,或父级目录不存在,将父级目录一同创建,成功返回true,如果目录存在,返回false。
  • renameTo(File dest):重命名或剪切目录或文件。如果目录或文件存在指定位置,进行重命名操作;如果文件或目录不存在指定位置,进行剪切操作。前提是文件或目录存在硬盘上。进行剪切操作时,不能操作非空目录。

 

2.4 File类的删除方法

  • delete():删除一个文件或空文件夹。如果文件夹不为空,则无法删除。成功返回true,失败返回false。
  • deleteOnExit():在虚拟机终止时,请求删除当前抽象路径名表示的文件或目录;保证程序异常时创建的临时文件也可以删除。

 

2.5 File类的判断方法

  • exists()   文件或文件夹是否存在。
  • isFile()   是否是一个文件,如果不存在,则始终为false。
  • isDirectory() 是否是一个目录,如果不存在,则始终为false。
  • isHidden()    是否是一个隐藏的文件或是否是隐藏的目录。
  • isAbsolute()  测试此抽象路径名是否为绝对路径名。

 

 

3.File类操作文件夹

3.1 操作文件夹

  • staic File[] listRoots():列出所有的根目录(Window中就是所有系统的盘符)
  • String[] list():返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。把当前文件夹下面的所有子文件名与子文件夹名 存储到一个String类型 的数组中 返回。
  • listFiles():返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。把当前文件夹下面的所有子文件与子文件夹都使用了一个FIle对象描述,然后把这些File对象存储到一个FIle数组中返回。

   注意:listFiles()返回的是一个File对象,可以操作文件及目录。list()返回的只是目录下所有文件及目录的名字,不可以操作文件。建议使用listFiles()

需求一:指定一个文件夹,然后该文件夹下面所有java文件

public class Dome6 {
    public static void main(String[] args) {
        File file = new File("E:\\aa\\bb");//指定目录位置
        listjava(file);
        System.out.println();
        listjava2(file);
    }

    public static void listjava(File dir) {
        File[] files = dir.listFiles();//获取文件夹下面所有子文件及文件夹
        for (File file : files) {
            String fileName = file.getName();
            if (fileName.endsWith(".java") && file.isFile()) {//判定条件:文件名以.java结尾,并且是文件
                System.out.println(fileName);
            }
        }
    }

    public static void listjava2(File dir) {
        File[] files = dir.listFiles();//获取文件夹下面所有子文件及文件夹
        for (File file : files) {
            String fileName = file.getName();
            // 使用正则表达式匹配.java文件名
            if (fileName.matches("^.+\\.java$") && file.isFile()) {//判定条件:文件名以.java结尾,并且是文件
                System.out.println(fileName);
            }
        }
    }
}
  • 带有过滤器的返回列表方法,过滤器可自定义。
    •  listFiles(FilenameFilter filter):返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
    • list(fileNameFilter filter) 返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

需求二: 指定一个文件夹,然后列出文件夹下面的所有子文件与文件夹,但是格式要如下:

        文件:
               文件名1
               文件名2
               文件名3
                ......

        文件夹:
              文件夹名1
              文件夹名2
              文件夹名3
              .......

public class Dome7 {
    public static void main(String[] args) {
        File file = new File("E:\\aa\\bb");
        listjava(file);
    }

    public static void listjava(File dir) {
        //创建File类对象,并传入过滤器
        File[] files = dir.listFiles(new MyFilter2());
        filesIterator(files);
    }

    // 遍历文件
    public static void filesIterator(File[] files) {
        System.out.println("文件:");
        for (File file : files) {
            if (file.isFile()) {
                System.out.println(file.getName());
            }
        }
        System.out.println("文件夹:");
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println(file.getName());
            }
        }
    }
}

// 自定义过滤器类(过滤器类需实现FilenameFilter接口)
class MyFilter2 implements FilenameFilter {
    // 直接在过滤器类的accept方法中返回过滤规则即可
    @Override
    public boolean accept(File dir, String name) {
        //匹配文件名name以.java结尾文件
        return name.matches("^.+\\.java$");//正则表达式
        //return name.endsWith(".java");// endWith(String str)方法
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值