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

Posted 所得皆惊喜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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());

③. 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());

④. 重命名和删除功能

  • ①. 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());

⑤. File类的判断功能

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

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

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

        //创建一个File对象
        File f = new File("D:\\\\heima\\\\java基础加强\\\\day08\\\\案例\\\\老师讲解代码\\\\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

⑥. 获取路径功能

  • ①. 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());
      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);
          
      

⑦. 文件三个小题目

  • ①. 键盘录入的文件夹,搜索以.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);
            
        
	
  
  • ②. 删除指定的目录(包含子目录)注意:切记别删除有用的数据,“概不负责哟”(重点是空目录的删除)
//这里的重点是空目录的删除
/*
题目二:删除指定的目录(包含子目录)注意:切记别删除有用的数据,"概不负责哟"
 */
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();
    


  • ③.键盘录入一个文件夹路径,统计该文件夹(不包含子文件夹)中,每种类型的文件及个数
键盘录入一个文件夹路径,统计该文件夹(不包含子文件夹),每种类型的文件及个数,
	注意:用文件类型("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;
            
        
    

以上是关于FILE_文件构造方法创建删除遍历等功能经典三个小题目的主要内容,如果未能解决你的问题,请参考以下文章

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

File类创建删除功能的方法和File类遍历(文件夹)目录功能

java File类

JAVA File类(文件的遍历,创建,删除)

File类

Java基础知识之File详解