首页 > 编程语言 > 详细

【JAVA基础】21 File类

时间:2020-06-16 16:21:35      阅读:63      评论:0      收藏:0      [点我收藏+]

1. File类的概述和构造方法

  • File类的概述

    • File更应该叫做一个路径

      • 文件路径或者文件夹路径

      • 路径分为绝对路径和相对路径

        • 绝对路径是一个固定的路径,从盘符开始

        • 相对路径相对于某个位置,在eclipse下是指当前项目下,在dos下

    • 查看API指的是当前路径

    • 文件和目录路径名的抽象表示形式

  • 构造方法

    • File(String pathname):根据一个路径得到File对象

    • File(String parent, String child):根据一个目录和一个子文件/目录得到File对象

    • File(File parent, String child):根据一个父File对象和一个子文件/目录得到File对象

  • 案例演示

    • File类的构造方法

    • 技术分享图片
      package com.heima.file;
      
      import java.io.File;
      
      public class Demo1_File {
      
          /**
           * @param args
           */
          public static void main(String[] args) {
              File file1 = new File("D:\\JAVA\\01 JAVA基础\\day19\\day19\\code\\day19\\src\\com\\heima\\file\\Demo1_File.java");
              System.out.println(file1.exists());
              
              File file2 = new File("xxx.txt");
              System.out.println(file2.exists());
              
              File Parent = new File("D:\\JAVA\\01 JAVA基础\\day19\\day19\\code\\day19\\src\\com\\heima\\file");
              String child = "Demo1_File.java";
              File file3 = new File(Parent, child);
              System.out.println(file3.exists());
              
              String parent = "D:\\JAVA\\01 JAVA基础\\day19\\day19\\code\\day19\\src\\com\\heima\\file";
              String child2 = "Demo1_File.java";
              File file4 = new File(Parent, child2);
              System.out.println(file4.exists());
          }
      
      }
      View Code

       

2. File类的创建功能

  • 创建功能

    • public boolean createNewFile():创建文件,如果存在这样的文件,就不创建了

    • public boolean mkdir():创建文件夹,如果存在这样的文件夹,就不创建了

    • public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来

  • 案例演示

    • File类的创建功能

    • 技术分享图片
      package com.heima.file;
      
      import java.io.File;
      import java.io.IOException;
      
      public class Demo2_File {
      
          /**
          public boolean createNewFile():创建文件,如果存在这样的文件,就不创建了
          public boolean mkdir():创建文件夹,如果存在这样的文件夹,就不创建了
          public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
           * @throws IOException 
           */
          public static void main(String[] args) throws IOException {
              File file1 = new File("test");
              System.out.println(file1.mkdir());
              
              File file2 = new File("test\\a\\b\\c");
              System.out.println(file2.mkdirs());
              
              File file3 = new File("test\\a\\b\\c\\t1.txt");
              System.out.println(file3.createNewFile());  // 需要ctrl+1,throws IOException
          }
      
      }
      View Code

       

    • 注意事项:

      • 如果你创建文件或者文件夹忘了写盘符路径,那么,默认在项目路径下。

 

3. File类的重命名和删除功能

  • 重命名和删除功能

    • public boolean renameTo(File dest):把文件重命名为指定的文件路径

    • public boolean delete():删除文件或者文件夹

  • 重命名注意事项

    • 如果路径名相同,就是改名。

    • 如果路径名不同,就是改名并剪切。

  • 删除注意事项:

    • Java中的删除不走回收站。

    • 要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹

  • 技术分享图片
    package com.heima.file;
    
    import java.io.File;
    import java.io.IOException;
    
    public class Demo3_File {
    
        /**
         重命名和删除功能
             public boolean renameTo(File dest):把文件重命名为指定的文件路径
             public boolean delete():删除文件或者文件夹
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
    //        demo1(); 
            
            File file1 = new File("a/b/c/d");
            File file2 = new File("a/b/c/d/test.txt");
            if(!file1.exists()) {
                file1.mkdir();
            } 
            if (!file2.exists()) {
                file2.mkdirs();
            }
            System.out.println(file1.exists());
            System.out.println(file1.delete()); // Java中的删除不走回收站。
                        // 要删除一个文件夹,请注意该文件夹内不能包含文件或者文件夹
        }
    
        public static void demo1() throws IOException {
            File file1 = new File("xxx.txt");
            File file2 = new File("ooo.txt");
            if (!file1.exists()) {
                file1.createNewFile();
            } else {
                file1.delete();
                file1.createNewFile();
            }
            
            if (file2.exists() && file1.exists()) {
                file2.delete();
                System.out.println(file1.renameTo(file2));
            }
        }
    
    }
    View Code

 

4. File类的判断功能

  • 判断功能

    • public boolean isDirectory():判断是否是目录

    • public boolean isFile():判断是否是文件

    • public boolean exists():判断是否存在

    • public boolean canRead():判断是否可读

    • public boolean canWrite():判断是否可写

    • public boolean isHidden():判断是否隐藏

  • 案例演示

    • File类的判断功能

    • 技术分享图片
      package com.heima.file;
      
      import java.io.File;
      
      public class Demo4_File {
      
          /**
          public boolean isDirectory():判断是否是目录
          public boolean isFile():判断是否是文件
          public boolean exists():判断是否存在
          public boolean canRead():判断是否可读
          public boolean canWrite():判断是否可写
          public boolean isHidden():判断是否隐藏
           */
          public static void main(String[] args) {
              File dir1 = new File("a");
              File file1 = new File("ooo.txt");
              System.out.println("查看文件file1和目录dir1是否是文件和目录");
              System.out.println(dir1.isDirectory());  // true
              System.out.println(file1.isFile());   // true
              
              System.out.println("查看文件file1是否可读可写");
              System.out.println(file1.canRead());   // true
              System.out.println(file1.canWrite());  // true
              
              System.out.println("设置文件file1和目录dir1是否可读可写");
              file1.setReadable(false);  //在windows系统中,认为所有文件都是可读的,所以设置无效
              System.out.println(file1.canRead()); // true
              file1.setWritable(false);  //在windows系统中,可以设置文件是否可写
              System.out.println(file1.canWrite()); // false
              dir1.setWritable(false);
              System.out.println(dir1.canWrite()); // true 
              
              System.out.println("查看目录是否可隐藏");
              System.out.println(dir1.isHidden()); //false
          }
      
      }
      View Code

       

5. File类的获取功能

  • 获取功能

    • public String getAbsolutePath():获取绝对路径

    • public String getPath():获取路径

    • public String getName():获取名称

    • public long length():获取长度。字节数

    • public long lastModified():获取最后一次的修改时间,毫秒值

    • public String[] list():获取指定目录下的所有文件或者文件夹的名称数组

    • public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组

  • 案例演示

    • File类的获取功能

    • 技术分享图片
      package com.heima.file;
      
      import java.io.File;
      import java.io.IOException;
      import java.text.SimpleDateFormat;
      import java.util.Date;
      
      public class Demo5_File {
      
          /**
          public String getAbsolutePath():获取绝对路径
          public String getPath():获取路径
          public String getName():获取名称
          public long length():获取长度。字节数
          public long lastModified():获取最后一次的修改时间,毫秒值
          public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
          public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
           * @throws IOException 
           */
          public static void main(String[] args) throws IOException {
              File file1 = new File("a/b/c/test");
              file1.mkdirs();
              for (int i = 0; i < 10; i++) {
                  File file_i = new File("a/b/c/test/" + i);
                  file_i.createNewFile();
              }
              System.out.println("获取绝对路径:" + file1.getAbsolutePath()); // 获取绝对路径:D:\JAVA\courses\day19\a\b\c\test
              System.out.println("获取路径:" + file1.getPath());  // 获取路径:a\b\c\test
              System.out.println("获取名称:" + file1.getName());  // 获取名称:test
              System.out.println("获取长度,字节数:" + file1.length());  //获取长度,字节数:4096
              
              System.out.println("获取最后一次的修改时间,毫秒值:" + file1.lastModified()); // 获取最后一次的修改时间,毫秒值:1592288698496
              Date d = new Date(file1.lastModified()); 
              SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:MM:SS");
              System.out.println(sdf.format(d));  // 2020-24-16 14:06:496
              
              System.out.println("获取指定目录下的所有文件或者文件夹的名称数组:");
              String[] arr_s = file1.list();
              for (String s : arr_s) {
                  System.out.println(s); // 0 1 2 3 .. 9
              }
          
              
              System.out.println("获取指定目录下的所有文件或者文件夹的File数组:");
              File[] listFiles = file1.listFiles();
              for (File file : listFiles) {
                  System.out.println(file);
              }
              /*
                  a\b\c\test\0
                  a\b\c\test\1
                  a\b\c\test\2
                  a\b\c\test\3
                  a\b\c\test\4
                  a\b\c\test\5
                  a\b\c\test\6
                  a\b\c\test\7
                  a\b\c\test\8
                  a\b\c\test\9
               */
          }
      
      }
      View Code

       

6. 输出指定目录下指定后缀的文件名

  • 案例演示

    • 需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称

    • 技术分享图片
      package com.heima.file;
      
      import java.io.File;
      
      public class Demo6_File {
      
          /**
           需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
           */
          public static void main(String[] args) {
      //        demo1();
              
              File dir = new File("E:\\");
              File[] subfiles = dir.listFiles(); // 获取E盘下所有的文件或文件夹对象
              for (File file : subfiles) {
                  if(file.isFile() && file.getName().endsWith(".jpg")) {
                      System.out.println(file);
                  } 
              }
          }
      
          public static void demo1() {
              File dir = new File("E:\\");
              String[] arr = dir.list(); // 获取E盘下的所有文件和文件夹
              for (String string : arr) {
                  if(string.endsWith(".jpg")) {
                      System.out.println(string);
                  } 
              }
          }
      
      }
      View Code

        

7. 文件名称过滤器的概述及使用

  • 文件名称过滤器的概述

    • public String[] list(FilenameFilter filter)

    • public File[] listFiles(FileFilter filter)

  • 文件名称过滤器的使用

    • 需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称

    • 技术分享图片
      package com.heima.file;
      
      import java.io.File;
      import java.io.FilenameFilter;
      
      public class Demo6_File {
      
          /**
           需求:判断E盘目录下是否有后缀名为.jpg的文件,如果有,就输出该文件名称
           */
          public static void main(String[] args) {
              File dir = new File("E:\\");
              
              String[] arr = dir.list(new FilenameFilter() {
                  
                  @Override
                  public boolean accept(File dir, String name) {
                      File file = new File(dir,name);
                      return file.isFile() && file.getName().endsWith(".jpg");
                  }
              });
              
              for (String string : arr) {
                  System.out.println(string);
              }
          }
      
      }
      View Code

       

  • 源码分析

    • 带文件名称过滤器的list()方法的源码

    • 技术分享图片
       public String[] list(FilenameFilter filter) {
              String names[] = list();   // 获取文件名称数组
              if ((names == null) || (filter == null)) {
                  return names;    // 判断null值情况
              }
              List<String> v = new ArrayList<>();   // 生成ArrayList数组列表,用于存储符合文件过滤器条件的文件名名称
              for (int i = 0 ; i < names.length ; i++) {
                  if (filter.accept(this, names[i])) {  // 调用文件过滤器的accept的方法
                      v.add(names[i]);
                  }
              }
              return v.toArray(new String[v.size()]); // 将输出结果转换为数组
          }
      View Code

       

8. File类(递归)

  • 5的阶乘

 

【JAVA基础】21 File类

原文:https://www.cnblogs.com/zoe233/p/13036452.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!