File类

1 File类概述和构造方法

  • File类介绍

    • 它是文件和目录路径名的抽象表示
    • 文件和目录是可以通过File封装成对象的
    • 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已。它可以是存在的,也可以是不存在的。将来是要通过具体的操作把这个路径的内容转换为具体存在的
  • File类的构造方法

    方法名说明
    File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
    File(String parent, String child)从父路径名字符串和子路径名字符串创建新的 File实例
    File(File parent, String child)从父抽象路径名和子路径名字符串创建新的 File实例
  • 示例代码

public class FileDemo01 {
    public static void main(String[] args) {
        //File(String pathname): 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
        File f1 = new File("E:\\wedu\\java.txt");
        System.out.println(f1);

        //File(String parent, String child): 从父路径名字符串和子路径名字符串创建新的 File实例
        File f2 = new File("E:\\wedu","java.txt");
        System.out.println(f2);

        //File(File parent, String child): 从父抽象路径名和子路径名字符串创建新的 File实例
        File f3 = new File("E:\\wedu");
        File f4 = new File(f3,"java.txt");
        System.out.println(f4);
    }
}

2 绝对路径和相对路径

  • 绝对路径
    是一个完整的路径,从盘符开始
  • 相对路径
    是一个简化的路径,相对当前项目下的路径
  • 示例代码
public class FileDemo02 {
    public static void main(String[] args) {
        // 是一个完整的路径,从盘符开始
        File file1 = new File("D:\\wedu\\a.txt");

        // 是一个简化的路径,从当前项目根目录开始
        File file2 = new File("a.txt");
        File file3 = new File("模块名\\a.txt");
    }
}

3 File类的创建功能

  • 方法分类

    方法名说明
    public boolean createNewFile()当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
    public boolean mkdir()创建由此抽象路径名命名的目录
    public boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录
  • 示例代码

package com.svt.file;

import java.io.File;
import java.io.IOException;

public class FileCreateNew {
    public static void main(String[] args) throws IOException {
        //需求1:我要在E:\\svt目录下创建一个文件java.txt
        File f1 = new File("E:\\svt\\java.txt");
        System.out.println(f1.createNewFile());
        System.out.println("--------");

        //需求2:我要在E:\\svt目录下创建一个目录JavaSE
        File f2 = new File("E:\\svt\\JavaSE");
        System.out.println(f2.mkdir());
        System.out.println("--------");

        //需求3:我要在E:\\svt目录下创建一个多级目录JavaWEB\\HTML
        File f3 = new File("E:\\svt\\JavaWEB\\HTML");
//        System.out.println(f3.mkdir());
        System.out.println(f3.mkdirs());
        System.out.println("--------");

        //需求4:我要在E:\\svt目录下创建一个文件javase.txt
        File f4 = new File("E:\\svt\\javase.txt");
//        System.out.println(f4.mkdir());
        System.out.println(f4.createNewFile());
    }
}

4 File类删除功能

  • 方法分类

    方法名说明
    public boolean delete()删除由此抽象路径名表示的文件或目录
  • 示例代码

package com.svt.file;

import java.io.File;
import java.io.IOException;

public class FileDelete {
    public static void main(String[] args) throws IOException {
//        File f1 = new File("E:\\svt\\java.txt");
        //需求1:在当前模块目录下创建java.txt文件
        File f1 = new File("myFile\\java.txt");
//        System.out.println(f1.createNewFile());

        //需求2:删除当前模块目录下的java.txt文件
        System.out.println(f1.delete());
        System.out.println("--------");

        //需求3:在当前模块目录下创建svt目录
        File f2 = new File("myFile\\svt");
//        System.out.println(f2.mkdir());

        //需求4:删除当前模块目录下的svt目录
        System.out.println(f2.delete());
        System.out.println("--------");

        //需求5:在当前模块下创建一个目录svt,然后在该目录下创建一个文件java.txt
        File f3 = new File("myFile\\svt");
//        System.out.println(f3.mkdir());
        File f4 = new File("myFile\\svt\\java.txt");
//        System.out.println(f4.createNewFile());

        //需求6:删除当前模块下的目录svt
        System.out.println(f4.delete());
        System.out.println(f3.delete());
    }
}

5 File类判断和获取功能

  • 判断功能

    方法名说明
    public boolean isDirectory()测试此抽象路径名表示的File是否为目录
    public boolean isFile()测试此抽象路径名表示的File是否为文件
    public boolean exists()测试此抽象路径名表示的File是否存在
  • 获取功能

    方法名说明
    public String getAbsolutePath()返回此抽象路径名的绝对路径名字符串
    public String getPath()将此抽象路径名转换为路径名字符串
    public String getName()返回由此抽象路径名表示的文件或目录的名称
    public File[] listFiles()返回此抽象路径名表示的目录中的文件和目录的File对象数组
  • 示例代码

package com.svt.file;

import java.io.File;

public class FileIsOrNo {
    public static void main(String[] args) {
        //创建一个File对象
        File f = new File("myFile\\java.txt");

//        public boolean isDirectory():测试此抽象路径名表示的File是否为目录
//        public boolean isFile():测试此抽象路径名表示的File是否为文件
//        public boolean exists():测试此抽象路径名表示的File是否存在
        System.out.println(f.isDirectory());
        System.out.println(f.isFile());
        System.out.println(f.exists());

//        public String getAbsolutePath():返回此抽象路径名的绝对路径名字符串
//        public String getPath():将此抽象路径名转换为路径名字符串
//        public String getName():返回由此抽象路径名表示的文件或目录的名称
        System.out.println(f.getAbsolutePath());
        System.out.println(f.getPath());
        System.out.println(f.getName());
        System.out.println("--------");

//        public File[] listFiles():返回此抽象路径名表示的目录中的文件和目录的File对象数组
        File f2 = new File("E:\\wedu");
        File[] fileArray = f2.listFiles();
        for(File file : fileArray) {
//            System.out.println(file);
//            System.out.println(file.getName());
            if(file.isFile()) {
                System.out.println(file.getName());
            }
        }
    }
}

6 File类练习应用案例一

  • 案例需求
    使用递归计算1-n的和
  • 代码实现
package com.svt.file;

public class fileDemo02 {
    //使用递归计算1-n的和
    public static void main(String[] args) {
        int i = sum(3 );
        System.out.println(i);
    }
    /**
     * 定义一个方法,使用递归计算1-n的和
     * 1+2+3+……+n
     * 最大值n
     * 最小值1
     * 结束条件-获取到1的时候结束
     * 目的-获取下一个被加的数字(n-1)
     *
     */
    public  static  int sum(int n){
        //获取到1的时候结束
        if (n==1){
            return 1;
        }
        //获取下一个被加的数字(n-1)
        return n+sum(n-1);
    }
}

7 File类练习应用案例二

  • 案例需求
    使用递归计算阶乘
    n的阶乘:n!=n*(n-1)321
    5的阶乘:5*(5-1)(5-2)(5-3)*(5-4)
    获取到1结束
    获取到下一个被乘的数字(n-1)
  • 代码实现
package com.svt.file;

public class fileDemo03 {
    /**
     * 使用递归计算阶乘
     * n的阶乘:n!=n*(n-1)*...*3*2*1
     * 5的阶乘:5*(5-1)*(5-2)*(5-3)*(5-4)
     * 获取到1结束
     * 获取到下一个被乘的数字(n-1)
     * @param args
     */
    public static void main(String[] args) {
        int re=mult(5);
        System.out.println(re);
    }
    //定义方法使用递归计算阶乘
    public static int mult(int n){
        //终止条件
        if (n==1){
            return 1;
        }
        return n*mult(n-1);
    }
}

8 File类练习应用案例三

  • 案例需求
    打印文件夹以及文件夹内文件
  • 代码实现
package com.svt.file;

import java.io.File;

public class fileDemo04 {
    public static void main(String[] args) {
        File file = new File("F:\\DELL\\dellStudy\\06-IO流\\02-学习资料\\学习笔记");
        getAllFile(file);
    }

    //递归定义一个方法
    public static void getAllFile(File dir){
        //打印被遍历的目录名称
        System.out.println(dir);
        File[] files = dir.listFiles();

        for (File file : files) {
            //对遍历得到的对象file进行判断,判断是否是文件夹
            if (file.isDirectory()){
                //f是一个文件夹,则继续遍历这个文件夹
                //直接调用getAllFile方法递归自己
                getAllFile(file);
            }else
                System.out.println(file);
                //file是一个文件,直接打印即可
        }
    }
}

9 FileFilter过滤器

  • 文件过滤器进行优化
    在File类中有两个和ListFiles重载的方法,方法的参数传递的就是过滤器
    • File[] listFiles(FileFilter filter)
      java.io.FileFilter接口:用于抽象路径名(File对象)的过滤器
      作用:用来过滤文件(File对象)
      抽象方法:用来过滤文件的方法
    • boolean accept(File pathname)
      测试指定路径对象名是否应该包含在某个路径名列表中。
      参数:File pathname:使用ListFiles方法遍历目录,得到的每一个文件对象
  • 用于抽象路径名的过滤器
    • File[] listFiles(FilenameFilter filter
      java.io.FilenameFilter接口:实现此接口的类实例可用于过滤器文件名。
      作用:用于过滤文件名称轴
      抽象方法:用来过滤文件的方法
    • boolean accept(File dir,string name) 测试指定文件是否应该包含在某一文件列表中。
      参数:
      File dir:构造方法中传递的被遍历的目录
      string name:使用ListFiles方法遍历目录,获取的每一个文件/文件夹的名称
      注意:两个过滤器接口是没有实现类的,需要我们自己写实现类,重写过滤的方法accept,在方法中自己定义过滤的规则
  • 代码示例
    接口类
package com.svt.file.fileDemo06;

import java.io.File;
import java.io.FileFilter;

public class FileFilterImpl implements FileFilter {
    @Override
    public boolean accept(File pathname) {
        if (pathname.isDirectory()){
            return true;
        }
    /**
     * 过滤的规则:在accept方法中,判断File对象是否是以.md结尾
     * 是就返回true不是就返回false
     */
        return pathname.getName().toLowerCase().endsWith(".md");
    }
    /**
     * 创建过滤器实现类
     * 重写过滤方法accept
     * 定义过滤规则
     *
     */

}

测试类

package com.svt.file.fileDemo06;

import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;

public class fileDemo07 {
    public static void main(String[] args) {
        File file = new File("F:\\DELL\\dellStudy\\06-IO流\\02-学习资料\\学习笔记");
        getAllFile(file);
    }

    //递归定义一个方法
    public static void getAllFile(File dir){
        //打印被遍历的目录名称
        //System.out.println(dir);
        //传递过滤器对象 使用匿名内部类
        /*File[] files = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                //过滤规则 pathname是文件夹或者是.md结尾的文件返回true
                return pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".md");
            }
        });*/

        //File[] files = dir.listFiles(pathname->pathname.isDirectory()||pathname.getName().toLowerCase().endsWith(".md"));

        /*File[] files = dir.listFiles(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                //过滤规则 pathname是文件夹或者是.md结尾的文件返回true
                return new File(dir,name).isDirectory()||name.toLowerCase().endsWith(".md");
            }
        });*/
        //lambda表达式 因为只有一个accept抽象方法
        File[] files = dir.listFiles(( d,  name)->new File(d,name).isDirectory()||name.toLowerCase().endsWith(".md"));

        for (File file : files) {
            //对遍历得到的对象file进行判断,判断是否是文件夹
            if (file.isDirectory()){
                //f是一个文件夹,则继续遍历这个文件夹
                //直接调用getAllFile方法递归自己
                getAllFile(file);
            }else
                System.out.println(file);
            //file是一个文件,直接打印即可
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今年不养猪只除草

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值