(十二)File类

为什么要学习File类?
因为在操作系统中,需要永久保存的数据都是以文件的形式存在,所以要想操作这些被永久保存的数据首先要学会在java语言中如何描述和表示文件。

一、概述

File类:文件和目录路径名的抽象表示形式。
一个File类对象,表示一个文件或者一个目录。它描述的就是一个路径名字符串所表示一个文件或目录。
抽象的含义和物理存在的含义相对,一个File类对象表示操作系统中(路径名所指向的逻辑上存在的,而不一定是物理上真实存在的)的一个文件或者一个目录。所以,可以认为,一个File对象和路径名字符串在表示操作系统文件这个层面,他们等价。

二、文件路径

1.路径名

绝对路径:绝对路径名是完整的路径名,不需要任何其他信息就可以定位它所表示的文件。
windows操作系统下: f:\devlopment\a.txt

相对路径: 相对路径名必须使用取自其他路径名的信息进行解释 (相对对父路径) ,是一个不完整的路径名。
windows操作系统下:develop\b.txt

java语言中,相对路径默认相对于谁?
默认情况下,java.io 包中的类总是根据当前用户目录来解析相对路径名。此目录由系统属性 user.dir 指定。

2.路径表示

  • 类UNIX
    对于UNIX 平台,绝对路径名的前缀始终是 “/”。相对路径名没有前缀。 表示根目录的绝对路径名的前缀为“/”,且名称序列为空。
    绝对路径: /dir/file.txt
    相对路径: dir/a.exe
    根目录: /
  • 对于 Microsoft Windows 平台
    包含盘符的路径名前缀由驱动器号和一个 “:” 组成。如果路径名是绝对路径名,还可能后跟 "\“
    绝对路径: e:\dir\a.txt(盘符不区分大小写)
    相对路径:没有盘符前缀 dir\a.txt

特殊字符的表示,给n这个字符前面加一个\,输出的不是n这个字符,而是一个换行符。\表示转义,是一个转义字符。
\本身表示的含义是转义,但本身有一个\字符。两个\表示的是\本身。

3.File的构造方法

  • File (String pathname)
    创建一个File对象,该File对象表示文件或者目录,就是指pathname这个路径名字符串所表示操作系统中的文件或目录。
  • File (String parent, Sting child)
  • File (File parent, String child)//其中一个参数是File类对象

三、 api

  • 创建
    public boolean createNewFile() //在操作系统上物理创建文件
    public boolean mkdir() //物理创建目录
    public boolean mkdirs()//物理创建目录

makir和mkdirs的区别:
当目标目录的父目录不存在的时候,mkdir()会创建目标目录失败。
当目标目录的父目录不存在的时候,mkdirs()会连同目标目录和不存在的父目录,一起创建出来。

  • 删除
    public boolean delete() //删除此抽象路径名表示的文件或目录。
    如果此路径名表示一个目录,则该目录必须为空才能删除。

  • 重命名
    public boolean renameTo(File dest)//对当前File对象所表示的文件或者目录重命名,将其重命名为参数File对象所表示的文件的文件名。

如果是目标文件对象和当前文件对象,在同一目录下,实现的效果就是重命名。
如果是目标文件对象和当前文件对象,不在同一目录下,除了重命名,还有文件移动效果。

  • 判断功能
    public boolean isFile() //判断当前File对象是否表示文件
    public boolean isDirectory() //判断当前File对象是否表示目录
    public boolean exists() //物理判断File对象表示的文件或目录是否真的存在
    public boolean canRead() //判断文件是否可读
    public boolean canWrite() //判断文件是否可写
    public boolean isHidden() //判断文件是否隐藏文件

  • 获取功能
    public File getAbsoluteFile() //获取文件的绝对路径字符串
    public String getPath() //获取文件的路径字符串
    public String getName() //获取文件的文件名
    public long length(),//返回由此抽象路径名表示的文件的长度。如果此路径名表示一个目录,则返回值是不确定的。大小单位为字节
    public long lastModified() //表示文件最后一次被修改的时间的 long 值,用与时间点(1970 年 1 月 1 日,00:00:00 GMT)之间的毫秒数表示

  • 高级获取功能(只针对目录)
    public String[] list()
    返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 每个字符串是一个文件名,而不是一条完整路径。
    如果此抽象路径名不表示一个目录,那么此方法将返回 null。
    public File[] listFiles()
    返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
    如果此抽象路径名不表示一个目录,那么此方法将返回 null。

  • 自定义获取功能
    自定义在哪里呢? 就是我们可以自己指定所要查找的文件需要满足的过滤条件。

list或listFiles方法的参数,它们都是用来表示,自己定义的过滤条件的
File[] listFiles(FileFilter filter)
String[] list(FilenameFilter filter)
File[] listFiles(FilenameFilter filter)

两种表示过滤条件的接口
public interface FilenameFilter
public interface FileFilter

File[] listFiles(FileFilter filter)

FileFilter: 文件过滤器

public interface FileFilter {
// pathname该File对象,表示的待判断File对象
// 如果该方法返回true:表示带判断的pathname File对象满足条件
// 如果该方法返回false:表示带判断的pathname File对象不满足条件(要被过滤掉)
boolean accept(File pathname)
}

假设如下场景:
我们不想获取目标目录中所有子文件或子目录的File对象,我们只想要获取一些满足特殊条件的子文件或者子目录的File对象。
比如: 我只想获取目标目录中,代表.txt文件的File对象

File dir = new File("e:\\demo");

    //利用匿名内部类对象,创建一个FileFilter对象,表示一种具体的过滤条件

    FileFilter filter = new FileFilter() {

      // 过滤条件就是在这里实现的
      @Override
      public boolean accept(File targetFile) {
        if (targetFile.isDirectory()) {
          // 如果是目录,不满足条件
          return false;
        }

        String name = targetFile.getName();
        // 判断如果是txt文件返回true,否则返回false
        return name.endsWith("txt");
      }
    };

    File[] files = dir.listFiles(filter);
    System.out.println(Arrays.toString(files)); //[e:\demo\a.txt]

#个人学习记录,如发现有错误之处,欢迎与我交流

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值