文件搜索(File)

一、File类

1.java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作
2.构造方法:

  • public File(String pathname) :通过文件路径名创建 File实例
  • public File(String parent, String child) :通过父路径名字符串子路径名字符串创建 File实例
  • public File(File parent, String child) :通过父级File对象子路径名字符串创建File实例
		//文件路径名
        String pathname = "E:\\aaa\\aa";
        File file = new File(pathname);

        //通过父路径和子路径字符串
        String parent = "E:\\aaa\\aa";
        String child = "b.txt";
        File file2 = new File(parent,child);

        //通过父级File对象和子路径字符串
        File parentDir = new File("E:\\aaa\\aa");
        String child2 = "b.txt";
        File file3 = new File(parentDir,child2);

3.常用方法:
(1)获取功能的方法:

  • public String getAbsolutePath() :返回此File的绝对路径名字符串

  • public String getPath() :将此File转换为路径名字符串。

  • public String getName() :返回由此File表示的文件或目录的名称

  • public long length() :返回由此File表示的文件的长度

 		File f = new File("\\aaa\\aa\\b.txt");
        System.out.println("文件绝对路径:" + f.getAbsolutePath()); //文件绝对路径:D:\aaa\aa\b.txt
        System.out.println("文件构造路径:" + f.getPath()); //文件构造路径:\aaa\aa\b.txt
        System.out.println("文件名称:" + f.getName()); //文件名称:b.txt
        System.out.println("文件长度:" + f.length() + "字节"); //文件长度:0字节

(2)绝对路径和相对路径

  • 绝对路径:从盘符开始的路径,这是一个完整的路径
  • 相对路径:相对于项目目录的路径,这是一个便捷的路径,开发中经常使用
		//E:\aaa\aa下的b.txt文件
        File f = new File("E:\\aaa\\aa\\b.txt");
        System.out.println(f.getAbsolutePath()); //E:\aaa\aa\b.txt

        //项目下的b.txt
        File f2 = new File("b.txt");
        System.out.println(f2.getAbsolutePath()); //D:\IdeaProjects\feisi\b.txt

(3)判断功能的方法:

  • public boolean exists() :此File表示的文件或目录是否实际存在
  • public boolean isDirectory() :此File表示的是否为目录
  • public boolean isFile() :此File表示的是否为文件
		File f = new File("E:\\aaa\\aa\\b.txt");
        File f2 = new File("E:\\aaa\\aa");

        //判断是否存在
        System.out.println(f.exists()); //true
        System.out.println(f2.exists()); //true

        //判断是文件还是目录
        System.out.println(f.isFile()); //true
        System.out.println(f.isDirectory()); //false

(4)创建删除功能的方法

  • public boolean createNewFile() :当且仅当具有该名称的文件尚不存在时,创建一个新的空文件
  • public boolean delete() :删除由此File表示的文件或目录
  • public boolean mkdir() :创建由此File表示的目录
  • public boolean mkdirs() :创建由此File表示的目录,包括任何必需但不存在的父目录
		//文件的创建
        File f = new File("a.txt");
        System.out.println(f.createNewFile()); //true

        //目录的创建
        File f2 = new File("Dir");
        System.out.println(f2.mkdir()); //true

        //创建多级目录
        File f3 = new File("Dir\\dir");
        System.out.println(f3.mkdirs()); //true

        //文件的删除(如果此File目录,则目录必须为空才能删除,文件则直接删除)
        System.out.println(f.delete()); //true

(5)目录的遍历

  • public String[] list() :返回一个String数组,表示该File目录中的所有子文件或目录
  • public File[] listFiles() :返回一个File数组,表示该File目录中的所有的子文件或目录
		File dir = new File("E:\\aaa");

        //获取当前目录下的文件以及文件夹的名称
        String[] names = dir.list();
        for (String name : names) {
            System.out.println(name); //a.txt aa
        }

        //获取当前目录下的文件以及文件夹对象
        File[] files = dir.listFiles();
        for (File file : files) {
            System.out.println(file); //E:\aaa\a.txt E:\aaa\aa
        }

4.递归打印多级目录
遍历之前,我们不知道有多少级目录,所以我们要使用递归实现

    public static void main(String[] args) {

        File dir = new File("E:\\aaa");
        printDir(dir);
//        打印结果
//        E:\aaa\a.txt
//        E:\aaa\aa
//        E:\aaa\aa\b.txt

    }

    public static void printDir(File dir) {

        File[] files = dir.listFiles();
        for (File file : files) {

            if(file.isFile()){
                System.out.println(file.getAbsolutePath());
            } else {
                System.out.println(file.getAbsolutePath());
                printDir(file);
            }
        }
    }

二、典型案例

搜索D:\aaa 目录中的.java 文件
分析

  1. 目录搜索,无法判断多少级目录,所以使用递归,遍历所有目录。
  2. 遍历目录时,获取的子文件,通过文件名称,判断是否符合条件。

代码实现

	public static void main(String[] args) {
        // 创建File对象
        File dir  = new File("D:\\aaa");
      	// 调用打印目录方法
        printDir(dir);
    }

    public static void printDir(File dir) {
      	// 获取子文件和目录
        File[] files = dir.listFiles();
      	
      	// 循环打印
        for (File file : files) {
            if (file.isFile()) {
              	// 是文件,判断文件名并输出文件绝对路径
                if (file.getName().endsWith(".java")) {
                    System.out.println("文件名:" + file.getAbsolutePath());
                }
            } else {
                // 是目录,继续遍历,形成递归
                printDir(file);
            }
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_33591873/article/details/107764667
今日推荐