• JDK1.8的File类详解


    1、静态属性

    后面带Char的是转为char类型,其实都是一样的结果。

    为什么要单独把地址的特殊字符单独包装为静态类

    • 因为在windows系统中,两个地址中间用分号[;]隔开,像环境变量中的path的内容。

    • 但是在Linux系统中,两个地址中间是用冒号[:]隔开的,在使用File类的时候,路径的特殊符号尽量使用内置的静态属性,这样就可以根据系统的不同,动态的变换了

    • 下面也一样,windows中为\,Linux系统的为/

    //  ;
    System.out.println(File.pathSeparatorChar);
    System.out.println(File.pathSeparator);
    
    // \
    System.out.println(File.separator);
    System.out.println(File.separatorChar);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2、构造函数

    基本都是把构造函数的参数打印出来,不要求地址真实存在

    1. 直接传入文件夹地址(常用)

      // 双斜杠\\在地址里代表单个\ 这是我项目的地址:D:\MyProgramSoftWare\MyProject\test
      // 绝对路径 D:\xxx\xxx
      File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
      System.out.println(f1); // D:\MyProgramSoftWare\MyProject\test
      
      // 相对路径 .\
      File f2 = new File(".\\");
      System.out.println(f1); // D:\MyProgramSoftWare\MyProject\test
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    2. 封装为方法,把子地址当做参数,好处是可以直接调用方法传入可变的地址

      public static void main(String[] args) {
          System.out.println(test("test")); // D:\MyProgramSoftWare\MyProject\test
          System.out.println(test("test2")); // D:\MyProgramSoftWare\MyProject\test2
          System.out.println(test("test3")); // D:\MyProgramSoftWare\MyProject\test3
      }
      
      public static File test(String childPath){
          File file = new File("D:\\MyProgramSoftWare\\MyProject\\",childPath);
          return file;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
    3. 传入一个文件类,一个字符串,好处是可以使用文件类的方法

      public static void main(String[] args) {
          File f = new File("D:\\MyProgramSoftWare\\MyProject");
          System.out.println(test(f,"test")); // D:\MyProgramSoftWare\MyProject\test
      }
      
      public static File test(File file, String childPath){
          /*
                  getPath方法就是toString方法,
                  底层是在toString方法里调用了getPath方法,
                  实际上都是一个方法
                  public String toString() {
                      return getPath();
                  }
               */
          File f = new File(file.getPath(), childPath);
          return f;
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
    4. 还有一个传入Url对象的构造函数,暂时不讲

    3、方法

    方法分为两种,下面一一介绍,只列举了部分常用方法

    3.1、对地址的操作

    1. 判断文件是否存在**(超常用)**

      public static void main(String[] args) {
          // 真实存在的文件夹  绝对路径
          File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
          // 不真实存在的文件 绝对路径
          File f2 = new File("D:\\MyProgramSoe\\MyProject\\test\\b.txt");
          // 真实存在的文件
          File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
      
          // 判断路径是否指向文件
          System.out.println(f1.exists()); // true
          System.out.println(f2.exists()); // false
          System.out.println(f3.exists()); // true
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    2. 判断是否为绝对路径**(不要求文件或文件夹真实存在)**

      public static void main(String[] args) {
          // 真实存在的文件夹  绝对路径
          File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
          // 相对路径
          File f2 = new File(".\\");
          // 不真实存在的文件夹 绝对路径
          File f3 = new File("D:\\MyProgramSoe\\MyProject\\test");
          // 判断是否为绝对路径
          boolean a1 = f1.isAbsolute();
          boolean a2 = f2.isAbsolute();
          boolean a3 = f3.isAbsolute();
          System.out.println(a1); // true
          System.out.println(a2); // false
          System.out.println(a3); // true
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
    3. 判断路径是否指向文件夹**(要求文件或文件夹真实存在)**

      public static void main(String[] args) {
          // 真实存在的文件夹  绝对路径
          File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
          // 不真实存在的文件夹 绝对路径
          File f2 = new File("D:\\MyProgramSoe\\MyProject\\test");
          // 真实存在的文件
          File f3 = new File("D:\\MyProgramSoe\\MyProject\\test\\a.txt");
      
          // 判断路径是否指向文件夹
          System.out.println(f1.isDirectory()); // true
          System.out.println(f2.isDirectory()); // false
          System.out.println(f3.isDirectory()); // false
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    4. 判断路径是否指向文件**(要求文件或文件夹真实存在)**

      public static void main(String[] args) {
          // 真实存在的文件夹  绝对路径
          File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
          // 不真实存在的文件 绝对路径
          File f2 = new File("D:\\MyProgramSoe\\MyProject\\test\\b.txt");
          // 真实存在的文件
          File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
      
          // 判断路径是否指向文件
          System.out.println(f1.isFile()); // false
          System.out.println(f2.isFile()); // false
          System.out.println(f3.isFile()); // true
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    5. 获取文件或文件夹的名称**(不要求文件或文件夹真实存在)**

      public static void main(String[] args) {
          // 真实存在的文件夹  绝对路径
          File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
          // 不真实存在的文件 绝对路径
          File f2 = new File("D:\\MyProgramSoe\\MyProject\\test\\b.txt");
          // 真实存在的文件
          File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
      
          // 判断路径是否指向文件
          System.out.println(f1.getName()); // test
          System.out.println(f2.getName()); // b.txt
          System.out.println(f3.getName()); // a.txt
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13

    3.2、对文件或文件夹的操作

    1. 创建文件()(不可以在不存在的父目录下创建文件,否则会异常)

      public static void main(String[] args) throws IOException {
          // 创建文件,真实存在的父目录
          File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\aaa.txt");
          // 创建文件,不真实存在的父目录
          File f2 = new File("D:\\MyProgram\\MyProject\\test\\b.txt");
          // 创建文件夹,真是存在的父目录
          File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\bbb");
      
          System.out.println(f1.createNewFile()); // true 创建成功
          //System.out.println(f2.createNewFile()); // Exception in thread "main" java.io.IOException: 系统找不到指定的路径。 创建失败
          System.out.println(f3.createNewFile()); // true 创建成功,虽然没有文件后缀,但也是个文件
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 结果

        在这里插入图片描述

    2. 创建文件夹**(不可以在不存在的父目录下创建文件夹,否则会异常)**

      public static void main(String[] args) throws IOException {
          // 创建文件,真实存在的父目录
          File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\aaa.txt");
          // 创建文件夹,不真实存在的父目录
          File f2 = new File("D:\\MyProgram\\MyProject\\test\\ccc");
          // 创建文件夹,真实存在的父目录
          File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\bbb");
      
          System.out.println(f1.mkdir()); // true 创建成功,虽然有文件后缀,但也是个文件夹
          //System.out.println(f2.mkdir()); // Exception in thread "main" java.io.IOException: 系统找不到指定的路径。 创建失败
          System.out.println(f3.mkdir()); // true 创建成功
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 结果

        在这里插入图片描述

    3. 创建文件夹PLUS((可以在不存在的父目录下创建文件夹))

      public static void main(String[] args) throws IOException {
          // 创建文件,真实存在的父目录
          File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
          // 创建文件夹,不真实存在的父目录aaa
          File f2 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\aaa\\bbb");
          // 创建文件夹,真实存在的父目录
          File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a");
      
          System.out.println(f1.mkdirs()); // true 创建成功,虽然有文件后缀,但也是个文件夹
          System.out.println(f2.mkdirs()); // true 创建成功,虽然父目录aaa不存在,但是也会创建成功
          System.out.println(f3.mkdirs()); // true 创建成功
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 结果

        在这里插入图片描述

    4. 删除文件或文件夹

      public static void main(String[] args) throws IOException {
          // 删除文件,真实存在的文件
          File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
          // 删除文件夹,aaa里面包含了bbb文件夹
          File f2 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\aaa");
          // 删除文件夹,真实存在的文件夹
          File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a");
      
          System.out.println(f1.delete()); // true 删除成功
          System.out.println(f2.delete()); // false 删除失败  如果文件夹里面有文件夹或者文件,或者文件里面有内容,则不能删除
          System.out.println(f3.delete()); // true 删除成功
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    5. 重命名文件或文件夹

      1. 先创建一个文件a.txt,一个文件夹aaa用来测试

        public static void main(String[] args) throws IOException {
            File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
            File f2 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\aaa");
        
            System.out.println(f1.createNewFile()); // true
            System.out.println(f2.mkdir()); // true
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      2. 分别重命名为b.txt,bbb

        public static void main(String[] args) throws IOException {
            // 创建文件夹,真实存在的父目录
            File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\a.txt");
            File f2 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\aaa");
        
            System.out.println(f1.renameTo(new File("D:\\MyProgramSoftWare\\MyProject\\test\\b.txt"))); // true
            System.out.println(f2.renameTo(new File("D:\\MyProgramSoftWare\\MyProject\\test\\bbb"))); // true
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
    6. 遍历文件夹**(如果被遍历的是文件的话,则异常)**

      public static void main(String[] args) throws IOException {
          // 遍历项目根目录
          File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test");
          File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\b.txt");
      
          /*
                  .idea
                  b.txt
                  bbb
                  out
                  src
                  test.iml
               */
          String[] list = f1.list();
          for (String s : list) {
              System.out.println(s);
          }
      
          /*String[] list2 = f3.list(); // 异常:Exception in thread "main" java.lang.NullPointerException
              for (String s : list2) {
                  System.out.println(s);
              }*/
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
    7. 获取文件的大小**(如果为文件夹则返回0)**

      public static void main(String[] args) throws IOException {
          // 遍历项目根目录
          File f1 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\bbb");
          File f2 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\b.txt");
          File f3 = new File("D:\\MyProgramSoftWare\\MyProject\\test\\bizhi.jpg");
      
          System.out.println(f1.length()); // 0
          System.out.println(f2.length()); // 9
          System.out.println(f3.length()); // 1439886
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 结果

        在这里插入图片描述

  • 相关阅读:
    【诗歌】被讨厌的勇气
    【集训DAY N】函数【数学】
    数据库技术及应用期末作业
    雷达信号处理框架,中远距离和近距离处理的框架(启发---推荐多看)
    C++ 多态
    基于Adaboost模型的数据预测和分类matlab仿真
    我的十年编程路 2015年篇
    03 - 调试环境的搭建(Bochs)(实验未完)
    【特征选择】基于二元多邻域人工蜂群 (BMNABC) 特征选择问题(Matlab代码实现)
    四种插入排序
  • 原文地址:https://blog.csdn.net/qq_57404736/article/details/127136131