21.java中的file类

File类概述:

文件和目录 路径名 的 抽象 表达形式
1. 一个File类对象 可以用来表示一个文件,或者一个目录
2. 一个File类对象表示的仅仅是 操作系统中 通过路径名所表述的文件或目录
3. 抽象表达形式? 抽象 和 物理存在相对
其实File对象表示的是一个 由一个 路径名 所确定的那个文件或目录,但是是由该路径名确定的文件或目录,并不一定物理存在。
 
 
File的构造方法:
 
// 创建一个File类对象,该File对象表示有pathname路径名字符串表示的路径名所确定的那个文件或目录
File (String pathname)
 
// 创建一个File对象,该File对象表示由parent(目标文件的父目录路径名字符串)和child(目标文件或目录,在parent父目录中的相对路径)共同确定
File (String parent, Sting child)
 
// 和构造方法2类似,只不过父目录路径,变成了用File对象表示
File (File parent, String child)

public class Demo1 {

  public static void main(String[] args) {

     // 第一种构造方法
    //File (String pathname)
    // 假设在操作系统的路径是: E:\demo\first\a.txt
    File file = new File("E:\\demo\\first\\a.txt");

    // 针对E:\demo\a.txt
    file = new File("E:\\demo\\a.txt");

    // 第二种构造方法
    // 假设在操作系统的路径是: E:\demo\first\a.txt
    String parent = "e:\\";
    file = new File(parent, "demo\\first\\a.txt");
    System.out.println(file);

    // 第三种构造方法来创建
    // E:\demo\first\a.txt
    File dir = new File("E:\\demo\\first");
    file = new File(dir, "a.txt");
    System.out.println(file);
  }

}

API

1.创建功能
(1). 创建文件:
public boolean createNewFile() 创建当前File对象所表示的文件
 
(2). 创建目录:
创建当前File对象所表示的目录
public boolean mkdir()
public boolean mkdirs()

mkdir 和 mkdirs创建目录的区别:
a. mkdir仅能在已经存在的目录下,创建新的目录
b. mkdirs 如果目标目录的父目录不存在的时候,它会将不存在的目标目录的父目录 连同目标目录一起,都创建好。

public class Demo1Create {

  public static void main(String[] args) throws IOException {
    //创建目标文件 E:\demo\first\b.txt
    File file = new File("E:\\demo\\first\\b.txt");

    //public boolean createNewFile()  创建当前File对象所表示的文件
    boolean newFile = file.createNewFile();
    //System.out.println(newFile);



    // 创建表示目标目录的File对象 E:\demo\third 目录
    String parent = "E:\\demo";
    File thirdDir = new File(parent, "third");
    //public boolean mkdir()
    boolean mkdir = thirdDir.mkdir();
    //System.out.println(mkdir);

    //public boolean mkdirs()  E:\demo\fourth\me 目标目录
    File parentDir = new File("e:\\demo\\fourth");
    File meDir = new File(parentDir, "me");
     // mkdir 创建失败
    mkdir = meDir.mkdir();
    System.out.println(mkdir);

    boolean mkdirs = meDir.mkdirs();
    System.out.println(mkdirs);


  }

}

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

public class Demo2Delete {

  public static void main(String[] args) {
    // 测试删除一个文件
    File file = new File("e:\\demo\\a.txt");

    //删除文件
    boolean delete = file.delete();
    System.out.println(delete);

    //删除非空目录
    File notNullDir = new File("e:\\demo\\first");
    boolean delete1 = notNullDir.delete();
    System.out.println(delete1);

    //删除空目录
    File nullDir = new File("E:\\demo\\non");
    boolean delete2 = nullDir.delete();
    System.out.println(delete2);


  }

}

3.重命名功能
public boolean renameTo(File dest)
将当前的File对象所表示的文件或者目录,重命名为dest File对象所表示的文件或目录
file.renameTo(dest)
(1). 当在源文件和修改之后的目标文件在同一目录的时候:效果只是重命名
(2). 当源文件和修改之后的目标文件不在同一目录的时候:
a. 移动文件
b. 重命名

public class Demo3Rename {

  public static void main(String[] args) {
    // 创建源文件对象
    File file = new File("e:\\demo\\first\\a.txt");

    // 重命名的目标文件
    File targetFile = new File("e:\\demo\\first\\aaa.txt");

    File destFile = new File("e:\\demo\\second\\aaa.txt");

    // 重名名(源文件和目标文件的路径在同一目录下)
    boolean b = file.renameTo(targetFile);
    System.out.println(b);

    //重名名(源文件和目标文件的路径不在同一目录下)
   b = file.renameTo(destFile);
    System.out.println(b);
  }

}

4.判断功能
public boolean isFile() // 判断File对象是否表示的是一个文件
public boolean isDirectory() //判断File对象是否表示的是一个目录
public boolean exists() //判断,File对象表示的文件,是否物理存在
public boolean canRead() // 判断File对象表示的文件,是否可读
public boolean canWrite() // 判断File对象表示的文件,是否可写
public boolean isHidden() // 判断文件是否是隐藏文件,判断File对象表示的文件是否是隐藏文件

public class Demo4Judge {

  public static void main(String[] args) {

    //目标目录
    File dir = new File("e:\\demo\\first");
    //public boolean isFile() // 判断File对象是否表示的是一个文件
    System.out.println(dir.isFile()); //false
    System.out.println(dir.isDirectory()); //true

    // public boolean exists() //判断,File对象表示的文件,是否物理存在
    File file = new File("e:\\demo\\first\\b.txt");
    System.out.println(file.exists());
    file = new File("e:\\demo\\6379");
    System.out.println(file.exists());

  }

}

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

public class Demo5Get {

  public static void main(String[] args) {
    // 相对路径File对象
    File file = new File("files\\a.txt");
    // 获取File对象表示的绝对路径
    System.out.println(file.getAbsolutePath()); //E:\wangdao\24th\file\files\a.txt
    // 获取文件的路径名字符串
    System.out.println(file.getPath()); // files\a.txt
    // 文件名(包括文件的类型后缀)
    System.out.println(file.getName()); //a.txt
    System.out.println("----------------------------------------------------------------------");
    file = new File("E:\\wangdao\\24th\\file\\files\\a.txt");
    System.out.println(file.getAbsolutePath()); //E:\wangdao\24th\file\files\a.txt
    // 获取文件的路径名字符串
    System.out.println(file.getPath()); //E:\wangdao\24th\file\files\a.txt
    // 文件名(包括文件的类型后缀)
    System.out.println(file.getName()); //a.txt


    // 绝对路径: 盘符:\\路径
    // 相对路径:  tmp\a.txt

    // 这种路径,jdk会自动补充一个盘符,工作目录所在的盘的盘符:
    File file1 = new File("\\ccc.txt");
    System.out.println(file1.getAbsolutePath());

    // public long length()
    File file2 = new File("E:\\wangdao\\24th\\file\\files\\a.txt");
    long length = file2.length();
    System.out.println(length);


  }

}

6.高级获取功能
public String[] list()
a. 返回一个字符串数组,这些字符串 指定 此抽象路径名表示的目录中 的 文件 和 目录。
b. 如果此抽象路径名不表示一个目录,那么此方法将返回 null。
c. 否则返回一个字符串数组,每个数组元素对应目录中的每个文件或目录。
d. 每个字符串是一个文件名,而不是一条完整路径。(不会递归获取,当前目录下的子目录中的内容)
 
public File[] listFiles()
a.返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
b.如果此抽象路径名不表示一个目录,那么此方法将返回 null。
c. 否则返回一个 File 对象数组,每个数组元素对应目录中的每个文件或目录。

public class Demo6HighGet {

  public static void main(String[] args) {
    // 创建目标目录
    File dir = new File("e:\\demo\\first");
    // 创建文件
    File file = new File("e:\\demo\\test.txt");

    // public String[] list()
    String[] list = dir.list();
    System.out.println(Arrays.toString(list));

    //如果此抽象路径名不表示一个目录,那么此方法将返回 null。
    String[] list1 = file.list();
    System.out.println(list1);

    File[] files = file.listFiles();
    System.out.println(files);


  }

}

7.自定义获取功能
File[] listFiles(FileFilter filter)
获取当前目录中,满足 指定条件的 目标目录或者目标文件的File对象集合
描述过滤规则:
对于一个File对象,如果accept方法返回true,就说明该File对象满足指定条件
否则,如果accept方法,返回false,则说明不满足指定条件(过滤条件)
interface FileFilter {
boolean accept(File pathname)
测试指定File对象(文件或者子目录)是否满足过滤条件(指定条件)。
}
注意事项:
(1). 一个FileFilter(子类)对象,表示一个具体的过滤条件
(2). 又因为具体的过滤条件根据需求可以各不相同,所以具体的过滤条件视同FileFilter子类实现的accept来具体实现的

public class Demo7HighGet2 {

  public static void main(String[] args) {
    // 创建目标目录
    File targetDir = new File("E:\\demo\\first");

    // listFiles()
    File[] files = targetDir.listFiles();
    System.out.println(Arrays.toString(files));

    // File[] listFiles(FileFilter filter)
    // 我要获取当前目录下的.txt文件的File对象
    FileFilter filter = new FileFilter() {
      @Override
      public boolean accept(File pathname) {
        // 实现一个具体的过滤条件, 当带判断的File对象实际表示一个.txt文件的时候,返回true
        // 否则,则返回false


        if (pathname.isDirectory()) {
          // 如果是目录,则不满足条件,返回false
          return false;
        }
        // 获取带判断的File对象所表示的文件的文件名
        String name = pathname.getName();
        return  name.endsWith(".txt");
      }
    };


    // 获取目标目录中,满足指定条件的File对象集合(使用jdk中的listFiles(filter))
    File[] targetFiles = targetDir.listFiles(filter);
    System.out.println(Arrays.toString(targetFiles));

    // 使用自己的方法,实现和jdk的 listFiles相同的功能
    File[] byCondition = findByCondition(targetDir, filter);
    System.out.println(Arrays.toString(byCondition));

  }

  /*
      在指定目录中,查找满足条件的子文件或子目录对应的File对象
   */
  public static File[] findByCondition(File targetDir, FileFilter condition) {

    // 一个ArrayList对象就是一个动态数组,其长度是会自动增长的
    ArrayList<File> result = new ArrayList<>();

    // 遍历目标目录中的每一个子文件或者子目录
    File[] files = targetDir.listFiles();

    for (int i = 0; i < files.length; i++) {
      // 逐个判断是否满足条件
      if (condition == null || condition.accept(files[i])) {
          // 满足条件
        result.add(files[i]);
      }
    }
    // 把ArrayList动态数组,转化成一个对应类型普通数组
    return result.toArray(new File[0]);
  }

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值