IO流-File类

IO流-File类


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


1. File类的构造方法

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

    public class FileDemo {
        public static void main(String[] args) {
            //File(String pathname): 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
            File f1 = new File("E:\\xiaoliu\\java.txt");
            System.out.println(f1);
    
            //File(String parent, String child): 从父路径名字符串和子路径名字符串创建新的File实例
            File f2 = new File("E:\\xiaoliu","java.txt");
            System.out.println(f2);
    
            //File(File parent, String child): 从父抽象路径名和子路径名字符串创建新的File实例
            File f3 = new File("E:\\xiaoliu");
            File f4 = new File(f3,"java.txt");
            System.out.println(f4);
        }
    }
    

2. 绝对路径和相对路径

  • 绝对路径

    是一个完整的路径,从盘符开始

  • 相对路径

    是一个简化的路径,相对当前项目下的路径

  • 示例代码

    public class FileDemo {
        public static void main(String[] args) {
            // 是一个完整的路径,从盘符开始
            File file1 = new File("D:\\xiaoliu\\test.txt");
    
            // 是一个简化的路径,从当前项目根目录开始
            File file2 = new File("test.txt");
            File file3 = new File("[ModelName]\\test.txt");
        }
    }
    

3. File创建功能

  • 方法分类

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

    public class FileDemo02 {
        public static void main(String[] args) throws IOException {
            //需求1:我要在E:\\xiaoliu目录下创建一个文件java.txt
            File f1 = new File("E:\\xiaoliu\\java.txt");
            System.out.println(f1.createNewFile());
            System.out.println("--------");
    
            //需求2:我要在E:\\xiaoliu目录下创建一个目录JavaSE
            File f2 = new File("E:\\xiaoliu\\JavaSE");
            System.out.println(f2.mkdir());
            System.out.println("--------");
    
            //需求3:我要在E:\\xiaoliu目录下创建一个多级目录JavaWEB\\HTML
            File f3 = new File("E:\\xiaoliu\\JavaWEB\\HTML");
            System.out.println(f3.mkdirs());
            System.out.println("--------");
    
            //需求4:我要在E:\\xiaoliu目录下创建一个文件javase.txt
            File f4 = new File("E:\\xiaoliu\\javase.txt");
            System.out.println(f4.createNewFile());
        }
    }
    

4. File类删除功能

  • 方法分类

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

    public class FileDemo {
        public static void main(String[] args) throws IOException {
            // File f1 = new File("E:\\xiaoliu\\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:在当前模块目录下创建xiaoliu目录
            File f2 = new File("myFile\\xiaoliu");
            // System.out.println(f2.mkdir());
    
            //需求4:删除当前模块目录下的xiaoliu目录
            System.out.println(f2.delete());
            System.out.println("--------");
    
            //需求5:在当前模块下创建一个目录xiaoliu,然后在该目录下创建一个文件java.txt
            File f3 = new File("myFile\\xiaoliu");
            // System.out.println(f3.mkdir());
            File f4 = new File("myFile\\xiaoliu\\java.txt");
            // System.out.println(f4.createNewFile());
    
            //需求6:删除当前模块下的目录xiaoliu
            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对象数组
  • 示例代码

      public class FileDemo04 {
          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:\\xiaoliu");
              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类练习

  • 案例需求

    统计一个文件夹中每种文件的个数并打印

    打印格式如下:

    ​ txt --> 4个

    ​ docx ---> 6个

    ​ png --> 8个

    ​ ...

  • 实现步骤

    • 定义一个方法,参数是HashMap集合用来统计次数和File对象要统计的文件夹
    • 遍历File对象,获取它下边的每一个文件和文件夹对象
    • 判断当前File对象是文件还是文件夹
    • 如果是文件,判断这种类型文件后缀名在HashMap集合中是否出现过
      • 如果出现过,获取这种类型文件的后缀名出现的次数,对其+1,再存回集合中
      • 如果没出现过,将这种类型文件的后缀名存入集合中,次数存1
    • 如果是文件夹,递归调用自己,HashMap集合就是参数集合,File对象是当前文件夹对象
  • 代码示例

    public class Test3 {
        public static void main(String[] args) {
    		// 如果定义一个变量来统计的话只能同时统计一种文件,所以我们采用Map集合来进行统计
            File file = new File("filemodule");
            HashMap<String, Integer> hm = new HashMap<>();
            getCount(hm, file);
            System.out.println(hm);
        }
      
    	//1.定义一个方法,参数是HashMap集合用来统计次数和File对象要统计的文件夹
        private static void getCount(HashMap<String, Integer> hm, File file) {
          	//2.遍历File对象,获取它下边的每一个文件和文件夹对象
            File[] files = file.listFiles();
            for (File f : files) {
              	//3.判断当前File对象是文件还是文件夹
                if(f.isFile()){
                  	//如果是文件,判断这种类型文件后缀名在HashMap集合中是否出现过
                    String fileName = f.getName();
                    String[] fileNameArr = fileName.split("\\.");
                    if(fileNameArr.length == 2){
                        String fileEndName = fileNameArr[1];
                        if(hm.containsKey(fileEndName)){
                            //出现过,获取这种类型文件的后缀名出现的次数,对其+1,在存回集合中
                            Integer count = hm.get(fileEndName);
                            //这种文件又出现了一次.
                            count++;
                            //把已经出现的次数给覆盖掉.
                            hm.put(fileEndName,count);
                        }else{
                            // 没出现过,将这种类型文件的后缀名存入集合中,次数存1
                            hm.put(fileEndName,1);
                        }
                    }
                }else{
                  //如果是文件夹,递归调用自己,HashMap集合就是参数集合,File对象是当前文件夹对象代码实现
                    getCount(hm,f);
                }
            }
        }
      
    }
    





以上就是File类啦,这儿也是目前我了解到的,如果有大佬觉得不全面或者是有问题,欢迎补充或指正哦!

posted @ 2022-07-23 19:36  兜小满  阅读(31)  评论(0)    收藏  举报