File练习

练习1:File类相关的API的练习题

需求:在当前模块下的aaa文件夹中创建一个a.txt文件

package a13filedemo;

import java.io.File;
import java.io.IOException;

public class FileTest1 {
    public static void main(String[] args) throws IOException {
        //1.创建a.txt的父级路径
        File file=new File("Test\\aaa");
        //2.创建父级路径
        //如果aaa存在,此时创建失败,方法返回false
        //如果aaa不存在,此时创建成功
        file.mkdirs();
        //3.拼接父级路径和子级路径
        File src=new File(file,"a.txt");
        boolean b = src.createNewFile();
        if(b){
            System.out.println("创建成功");
        }else{
            System.out.println("创建失败");
        }
    }
}

运行结果:

 

练习2:File类相关的API的练习题

需求:定义一个方法找某一个文件夹中是否有以avi结尾的电影(暂时不考虑子文件夹)

package a13filedemo;

import java.io.File;

public class FileTest2 {
    public static void main(String[] args) {
        File file=new File("E:\\JAVA\\24_3_28\\basic_code\\ddd");
        boolean b = havaAVI(file);
        System.out.println(b);//false
    }
    public static boolean havaAVI(File file){
        //进入ddd文件夹,而且要获取里面所有的内容
        File[] files = file.listFiles();
        //2.遍历数组获取里面的每一个元素
        for (File f : files) {
            if(f.isFile()&&f.getName().endsWith(".avi")){
                return true;
            }
        }
        return false;
    }
}

运行结果:

 

 

练习3:

需求:定义一个方法找某一个文件夹中是否有以avi结尾的电影(需要考虑子文件夹)

套路:1.进入文件夹2.遍历数组3.判断

package a13filedemo;

import java.io.File;

public class FileTest3 {
    public static void main(String[] args) {
        File src=new File(("C:\\"));
        findAVI();
    }
    public static void findAVI(){
        //获取本地所有盘符
        File[] arr = File.listRoots();
        for (File f : arr) {
            findAVI(f);
        }
    }
    public static void findAVI(File src){
        //1.进入文件夹src
        File[] files = src.listFiles();
        //2.遍历数组,依次得到src里面的每一个文件或者文件夹
        if(files!=null){
            for (File file : files) {
                if(file.isFile()){
                    String name = file.getName();
                    if (name.endsWith(".avi")){
                        System.out.println(file);
                    }
                }else{
                    //细节:再次调用本方法的时候,参数一定是src的次一级路径
                    findAVI(file);
                }
            }
        }

    }
}

练习4:删除一个多级文件夹

如果我们要删除一个有内容的文件夹,先删除文件夹里面所有内容,再删除自己

package a13filedemo;

import java.io.File;

public class FileTest4 {
    public static void main(String[] args) {
        File file=new File("E:\\JAVA\\24_3_28\\basic_code\\ddd");
        delete(file);
    }
    public static  void delete(File src){
        //1.删除文件夹里面的所有内容,再删除自己
        File[] files = src.listFiles();
        for (File file : files) {
            if(file.isFile()){
                file.delete();
            }else {
                delete(file);
            }
        }
        //2.删除自己
        src.delete();
    }
}

练习5:统计一个文件夹的总大小 

package a13filedemo;

import java.io.File;

public class FileTest5 {
    public static void main(String[] args) {
        File file=new File("E:\\JAVA\\24_3_28\\basic_code\\bbb");
        long len = getLen(file);
        System.out.println(len);
    }
    public static long getLen(File src){
        long len=0;
        File[] files = src.listFiles();
        for (File file : files) {
            if(file.isFile()){
                len=len+file.length();
            }else{
                len=len+getLen(file);
            }
        }
        return len;
    }
}

运行结果:

 

练习6:统计一个文件夹中每种文件的个数并打印(需要考虑子文件夹)

package a13filedemo;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class FileTest6 {
    public static void main(String[] args) {
        File file = new File("E:\\JAVA\\24_3_28\\basic_code\\bbb");
        HashMap<String, Integer> hm = getCount(file);
        System.out.println(hm);

    }

    public static HashMap<String, Integer> getCount(File src) {
        //定义集合用来统计
        HashMap<String, Integer> hm = new HashMap<>();//键表示后缀名,值表示次数
        File[] files = src.listFiles();
        for (File file : files) {
            if (file.isFile()) {
                String name = file.getName();
                String[] arr = name.split("\\.");
                if (arr.length >= 2) {
                    String endName = arr[arr.length - 1];
                    if (hm.containsKey(endName)) {
                        int count = hm.get(endName);
                        count++;
                        hm.put(endName, count);
                    } else {
                        hm.put(endName, 1);
                    }
                }
            } else {
                //子文件夹中每一种文件的个数
                HashMap<String, Integer> sonMap = getCount(file);
                //遍历sonMap集合把里面的集合累加到hm中
                Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
                for (Map.Entry<String, Integer> entry : entries) {
                    String key = entry.getKey();
                    Integer value = entry.getValue();
                    if (hm.containsKey(key)) {
                        int count = hm.get(key);
                        count = count + value;
                        hm.put(key,count);
                    } else {
                        hm.put(key, value);
                    }
                }
            }
        }
        return hm;
    }
}

运行结果:

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值