Java File类

概述

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

构造方法

  • File(File parent, String child)
    从父抽象路径名和子路径名字符串创建新的 File实例。

  • File(String pathname)
    通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例。

      参数pathname为路径名称(字符串形式)
      路径可以以文件结尾,也可以以文件夹结尾
      路径可以存在,也可以不存在
    
  • File(String parent, String child)
    从父路径名字符串和子路径名字符串创建新的 File实例。

      把路径分为了两部分
      parent:父路径
      child: 子路径
      好处:父路径和子路径可以单独书写,使用起来很灵活
    
  • File(URI uri)
    通过将给定的 file: URI转换为抽象路径名来创建新的 File实例。

静态成员变量

  • static String pathSeparator
    与系统相关的路径分隔符字符,为方便起见,表示为字符串。

      路径分隔符:
      	windows系统:;(分号)
      	linux系统: :(冒号)
    
  • static char pathSeparatorChar
    与系统相关的路径分隔符。

  • static String separator
    与系统相关的默认名称分隔符字符,以方便的方式表示为字符串。

      名称分隔字符:
      	windows: \ (反斜杠)
      	linux: /(正斜杠)
    
  • static char separatorChar
    与系统相关的默认名称分隔符。

注意: 为了区分系统,尽量不要把路径写死,用这些静态变量表示

绝对路径和相对路径

  • 绝对路径: 是一个完整的路径(以盘符开始)
  • 相对路径:是一个简化的路径(以当前项目的根目录开始)

常用方法

1.获取
  • String getAbsolutePath(): 返回此File对象的绝对路径
  • String getPath(): 返回此File对象的相对路径
  • String getName(): 返回此File对象表示的文件名称或目录名称
  • long length():返回此File对象表示的文件的长度(字节为单位,文件夹没有大小的概念,如果路径不存在,返回0)
2.判断
  • boolean exists(): 此File对象表示的文件或目录是否存在
  • boolean isDirectory(): 此File对象表示的是否是目录
  • boolean isFile(): 此File对象表示的是否为文件
3.创建和删除
  • boolean createNewFile(): 当且仅当具有该名称的文件不存在时,创建一个新的空文件

      1.此方法只能创建文件,不能创建文件夹
      2.创建文件的路径必须存在,否则会抛异常
      3.此方声明抛出了IOException,使用时必须处理异常
    
  • boolean delete(): 删除由此File对象表示的目录或文件

  • boolean mkdir(): 创建由此File对象表示的目录(单级文件夹)

  • boolean mkdirs(): 创建由此File对象表示的目录,包括任何必须但不存在的父目录(单极或多级文件夹)

4.目录的遍历
  • String[] list(): 返回一个字符串数组,命名由此抽象路径名表示的目录中的文件和目录。

  • File[] listFiles(): 返回一个抽象路径名数组,表示由该抽象路径名表示的目录中的文件。

      1.路径不存在,会抛出空指针异常
      2.如果路径不是一个目录,也会抛出空指针异常
      3.隐藏文件或隐藏文件夹也可以遍历到
    

示例:递归打印多级目录

import java.io.File;

public class 递归打印多级目录 {
    public static void main(String[] args) {
        File file = new File("D:\\Drivers");
        getAllFiles(file);
    }

    public static void getAllFiles(File dir){
        File[] files = dir.listFiles();
        for (File file : files) {
            System.out.println(file);
            if(file.isDirectory())  //如果是一个目录就继续遍历
                getAllFiles(file);
        }

    }
}

文件过滤器

遍历目录有这样两个方法:
File[] listFiles(FileFilter filter)
String[] list(FilenameFilter filter)
其中方法的参数传递的就是过滤器

java.io.FileFilter接口
作用:用来过滤文件
接口中只有一个方法:boolean accept(File pathname)

java.io.FilenameFilter接口
作用:用来过滤文件名称
接口中只有一个方法:boolean accept(File dir, String name)

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

import java.io.File;

public class 过滤器 {
    public static void main(String[] args) {
        File file = new File("D:\\Drivers");
        getAllFiles(file);
    }
    
    public static void getAllFiles(File dir){
        //1.FileFilter
       // File[] files = dir.listFiles(file -> file.getName().endsWith("exe") || file.isDirectory());  //这里过滤掉不是以exe结尾的文件(因为后面还要递归遍历文件夹,所以文件夹也保留)
        //2.FilenameFilter
        File[] files = dir.listFiles((d, name) -> name.endsWith("exe") || new File(d, name).isDirectory());
        for (File file : files) {
            System.out.println(file);
            if(file.isDirectory())  //如果是一个目录就继续遍历
                getAllFiles(file);
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值