• FILE_文件构造方法、创建、删除、遍历等功能、经典三个小题目


    ①. File类概述

    • ①. File类是Java提供的针对针对磁盘中的文件或目录转换对象的包装类
      File可以代表文件或文件夹
      File对象可以实现获取文件和目录属性等功能,可以实现对文件和目录的创建和删除等功能

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

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

    ②. 构造方法

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

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

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

            //File(String pathname):根据一个路径得到File对象
            //写一个\表示转义了,所以要写两个
            File file=new File("C:\\Users\\Administrator\\Desktop\\day19_video");
            boolean flag=file.exists();
            System.out.println(flag);
            File file2=new File("hello.txt");
            System.out.println(file2.exists());
    
            //File(String parent,String child):根据一个目录和一个子文件/目录得到File对象
            String parent="F:\\";
            String child="f.txt";
            File file3=new File(parent,child);
            System.out.println(file3.exists());
    
            //File(File parent,String child):根据一个父File对象和一个子文件/目录得到File对象
            File parent2=new File("F:\\");
            File file4=new File(parent2,child);
            System.out.println(file4.exists());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    ③. File类的创建功能

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

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

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

            //public boolean createNewFile():创建文件,如果存在这样的文件,就不创建了
            File file=new File("yyy.txt");
            System.out.println(file.createNewFile());
            //public boolean mkdir():创建文件夹,如果存在这样的文件夹,就不创建了
            File dir1=new File("aaa");
            System.out.println(dir1.mkdir());
            //这样写是可以的,文件夹也可以有后缀的
            File dir2=new File("aaa.txt");
            System.out.println(dir2.mkdir());
            //public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
            File file3=new File("yyy\\xxx");
            System.out.println(file3.mkdirs());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    ④. 重命名和删除功能

    • ①. public boolean renameTo(File dest):把文件重命名为指定的文件路径
    1. 如果路径名相同,就是改名
    2. 如果路劲名不同,就是改名并剪切
    • ②. public boolean delete():删除文件或者文件夹
    1. Java中的删除不走回收站
    2. 如果一个目录中有内容(目录、文件),不能直接删除。应该先删除目录下的内容,最后才删除目录
            File file1=new File("world.txt");
            File file2=new File("F:\\world.txt");
            File file3=new File("hello.txt");
            System.out.println(file1.renameTo(file2));
            //如果删除一个文件夹,那么文件夹必须是空的
            System.out.println(file3.delete());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ⑤. File类的判断功能

    • ①. public boolean exists( ):判断文件(File)是否存在

    • ②. public boolean isFile( ):判断File是否为文件

    • ③. public boolean isDirectory( ):判断File是否为目录

            //创建一个File对象
            File f = new File("D:\\myFile\\java.txt");
    
    //        public boolean isDirectory():测试此抽象路径名表示的File是否为目录
    //        public boolean isFile():测试此抽象路径名表示的File是否为文件
    //        public boolean exists():测试此抽象路径名表示的File是否存在
            System.out.println(f.isDirectory());//false
            System.out.println(f.isFile());//true
            System.out.println(f.exists());//true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ⑥. 获取路径功能

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

    • ②. public String getPath( ):获取的是File()构造器中的方法的参数

    • ③. public String getName( ): 获取名称

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

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

        // 现在在IDEA的项目目录下有一个a.txt
        File file=new File("a.txt");
        // 获取到的是E:\workcode\4.23.0-dev\a.txt
        System.out.println(file.getAbsolutePath());
        // a.txt
        System.out.println(file.getPath());
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
          File dir=new File("F:\\");
          //获取F盘下所有的文件或文件夹对象
          File[]subFiles=dir.listFiles();
          for(File subFile:subFiles){
              if(subFile.isFile()&&subFile.getName().endsWith(".jpg")){
              System.out.println(subFile);
              }
          }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ⑦. 文件三个小题目

    • ①. 键盘录入的文件夹,搜索以.txt结尾的文件
    /*
    题目一:键盘录入一个文件夹路径
    		对键盘录入的文件夹路径进行判断
    			如果不存在,提示重新录入
    			如果是文件路径,提示再次录入文件夹录入
    			如果是文件夹路径,搜索该文件下所有以.txt结尾的文件(包含子目录中的文件)
     */
    public class Test02 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个文件夹的路径:");
    
            //由于不确定到底要输入几次,最好来一个无限循环,这里也可以定义成一个方法
            while(true){
                //输入数据
                String s = sc.nextLine();
                //一个字符串,怎么确定是一个文件夹的路径? 或者是文件的路???
                //可以把输入的字符串变成一个  File对象
                //每次输入一个字符串,就把该字符串变成File
                File file = new File(s);
    
                //有可能是用户乱输入
                //最好先判断是否在计算机中存在
                if(!file.exists()){
                    System.out.println("哥们,您输入的不存在,请重新输入!!!");
                }else if(file.isFile()){
                    System.out.println("哥们,请输入一个文件夹好吗?");
                }else{
                    //那么 file 代表的路径一定是 文件夹的路径
                    //如果是文件夹路径,搜索该文件下所有 以.txt结尾的文件(包含子目录中的文件)
                    //因为你要递归,所以要定义一个方法专门用于打印 .TXT 结尾的文件
    
                    print(file);
                    //结束循环
                    break;
                }
            }
        }
    
        private static void print(File f) {
            /*
                分析:
                    1,首先应该获取某一个文件夹下的所有数据 (不包含子文件) 返回一个File数组
                    2,遍历数组
                    3,判断数组中的对象是否为文件
                        如果是文件,判断该文件是否是 .txt文件
                            如果是就直接输出该文件的名字
                        如果不是文件,就需要递归调用
             */
    
            File[] files = f.listFiles();
    		if(files!=null){
            //2,遍历数组
            for (File file : files) {
                //3,判断数组中的对象是否为文件
                if(file.isFile()){
                    //如果是就直接输出该文件的名字
                    if(file.getName().endsWith(".txt")){
                        System.out.println(file.getName());
                    }
                }else{
                    //如果不是文件,就需要递归调用
                    print(file);
                }
            }
    	}
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • ②. 删除指定的目录(包含子目录)注意:切记别删除有用的数据,“概不负责哟”(重点是空目录的删除)
    //这里的重点是空目录的删除
    /*
    题目二:删除指定的目录(包含子目录)注意:切记别删除有用的数据,"概不负责哟"
     */
    public class Test03 {
        public static void main(String[] args) {
            //创建一个File对象,指向一个文件夹路径
            File f = new File("D:\\新建文件夹");
            deleteDir(f);
        }
        public static void deleteDir(File file){
               /* 分析:
                   文件夹不能直接删除,应该先删除文件夹中的文件,如果有子文件还需要先删除子文件夹中的文件
                   1,获取 file 该文件夹下的所有数据 (不包含子文件夹中的数据), 返回是就是一个数组
                   2,遍历数组
                   3,判断数组中的数据是否为 文件
                        如果是文件,直接 干掉
                        如果是文件夹,需要递归调用
                  会剩下 空文件夹*/
            //1,获取 file 该文件夹下的所有数据 (不包含子文件夹中的数据), 返回是就是一个数组
            File[] files = file.listFiles();
            if(files!=null){
    	   //2,遍历数组
            for (File f : files) {
                //3,判断数组中的数据是否为 文件
                if(f.isFile()){
                   //如果是文件,直接 干掉
                   f.delete();
                }else{
                    //如果是文件夹,需要递归调用
                    deleteDir(f);
                }
            }
          }
            //只要在循环之后把File删除即可
            file.delete();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • ③.键盘录入一个文件夹路径,统计该文件夹(不包含子文件夹)中,每种类型的文件及个数
    键盘录入一个文件夹路径,统计该文件夹(不包含子文件夹),每种类型的文件及个数,
    	注意:用文件类型("java","txt"...)作为key,用个数作为value,
    	放入到map集合中,并按照如下格式打印map集合中的内容
    		docx类型的文件有  1 个
    		java类型的文件有  24 个
    		txt类型的文件有  10public class Demo5 {
        public static void main(String[] args) {
            File file=getFile();
    
            printNum(file);
            for(String key:hm.keySet()){
                Integer value=hm.get(key);
                System.out.println(key+"="+value);
            }
        }
        static HashMap<String,Integer> hm=new HashMap<>();
    
        //获取文件的个数
        public static void printNum(File file) {
           //F:\test
            //将文件夹遍历
            File[] files = file.listFiles();
            if(files!=null){
                for(File file2:files){
                    //判断是否是文件夹,如果是文件夹就递归调用
                    if(file2.isDirectory()){
                        printNum(file2);
                    }else{
                        //得到每一个文件夹中的文件的名字
                        String str=file2.getName();
                        //获取最后一个.出现的索引
                        int index=str.lastIndexOf(".");
                        //获取后缀名字
                        str=str.substring(index+1);//txt
                        //System.out.println(str);
                        hm.put(str,!hm.containsKey(str)?1:hm.get(str)+1);
                    }
                }
            }
    
        }
    
        //得到文件
        private static File getFile() {
            Scanner sc=new Scanner(System.in);
            System.out.println("键盘录入一个文件夹路径");
            String line ;
    
            while(true){
                line = sc.nextLine();
                File file=new File(line);
                if(!file.exists()){
                    System.out.println("你输入的文件夹路径不存在,请重新输入");
                }else  if(file.isFile()){
                    System.out.println("你输入的是文件,请重新输入");
                }else{
                    return file;
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
  • 相关阅读:
    Vue3 -- Composition API setup函数 reactive ref ...
    黑豹程序员-h5前端录音、播放
    GO 工程下载依赖操作流程(go mod)
    java-php-python-ssm一起组局校园交友平台计算机毕业设计
    Tomcat Takeover
    快手ip地址切换器怎么用?分享使用指南
    计算机毕业设计springboot+vue基本微信小程序的驾校宝典系统-驾照考试系统
    麻雀优化算法SSA及其改进策略
    2022.11.1 固体物理
    Ubuntu 20.04 升级Ubuntu 22.04 及更换国内源指南
  • 原文地址:https://blog.csdn.net/TZ845195485/article/details/128142484