Java File类及案例

news2024/9/23 7:23:20

File概述和构造方法

  • File对象就表示一个路径,可以是文件路径、也可以是文件夹的路径
  • 这个路径可以是存在的,也允许是不存在的
方法名称说明
public File (String pathname)把字符串表示的路径变成File对象
public File (Srting parent, String child)把父级路径和子级路径进行拼接
public File (File parent, String child)把父级对象和子级路径进行拼接

File成员方法

判断、获取
在这里插入图片描述
创建、删除
在这里插入图片描述
获取并遍历(蓝色方法重要掌握)
在这里插入图片描述
在这里插入图片描述

案例示例

案例一:

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

package com.liming.file01;

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

public class Demo02 {
    public static void main(String[] args) throws IOException {
        /* 在当前模块下的aaa文件夹中创建一个a.txt文件 */

        //1.创建父级路径aaa
        File file = new File("day10\\aaa");
        file.mkdirs();//aaa不存在才创建,存在就创建失败
        //2.拼接父级路径和子级路径
        File src = new File(file, "a.txt");
        boolean b = src.createNewFile();
        if (b) {
            System.out.println("创建成功");
        } else {
            System.out.println("创建失败");
        }
    }
}

案例二:

找某一个文件夹中是否有以avi结尾的电影 (不考虑子文件夹)

package com.liming.file01;

import java.io.File;

public class Demo03 {
    public static void main(String[] args) {
        /* 找某一个文件夹中是否有以avi结尾的电影 暂时不考虑子文件夹*/
        File file = new File("D:\\JavaSE305\\day10\\aaa");
        boolean b = findAVI(file);
        System.out.println(b);
    }

    public static boolean findAVI(File file) {
        File[] files = file.listFiles();
        for (File f : files) {
            if (f.isFile() && f.getName().endsWith(".avi")) {
                return true;
            }
        }
        return false;
    }
}

案例三:

遍历硬盘查找以avi结尾的文件 需要考虑子文件夹

package com.liming.file01;

import java.io.File;

public class Demo04 {
    public static void main(String[] args) {
        /* 遍历硬盘查找以avi结尾的文件 需要考虑子文件夹 */
       findAVI();
    }

    /**
     * 获取磁盘所有盘符
     */
    public static void findAVI(){
        File[] files = File.listRoots();
        for (File src : files) {
            findAVI(src);
        }
    }

    public static void findAVI(File src) {
        //1. 获取c盘目录下所有文件和文件夹
        File[] files = src.listFiles();
        //5. 处理盘符权限问题
        if (files != null) {
            //2. 遍历获取到的文件夹和文件
            for (File file : files) {
                if (file.isFile()) {
                    //3.判断,如果是文件可以执行题目的业务逻辑
                    String name = file.getName();
                    if (name.endsWith(".avi")) {
                        System.out.println(file);
                    }
                } else {
                    //4. 判断如果是文件夹,使用递归继续遍历判断文件夹里面的内容
                    findAVI(file);
                }
            }
        }
    }
}

案例四:

/* 删除一个多级文件夹
* 思路:递归
* 1.先删除文件夹里面的所有内容
* 2.在删除自己
* */

package com.liming.file01;

import java.io.File;

public class Demo05 {
    public static void main(String[] args) {
        /* 删除一个多级文件夹
         * 思路:递归
         * 1.先删除文件夹里面的所有内容
         * 2.在删除自己
         *  */
        File file = new File("day10\\aaa");
        deleteFile(file);
    }

    /**
     * @param file 要删除的文件夹
     */
    public static void deleteFile(File file) {
        //1. 先删除文件夹里面所有内容
        //1.1 获取文件夹中所有内容
        File[] files = file.listFiles();
        //1.2 遍历获取到的数组
        for (File f : files) {
            if (f.isFile()) {
                //1.3 判断如果是文件直接删除
                f.delete();
            } else {
                //1.4 如果是文件夹就递归
                deleteFile(f);
            }
        }
        //2. 在删除自己
        file.delete();
    }
}

案例五:

统计一个文件夹的总大小

package com.liming.file01;

import java.io.File;

public class Demo06 {
    public static void main(String[] args) {
        /* 统计一个文件夹的总大小 */
        File src = new File("D:\\aaa\\bbb");
        long len = getLen(src);
        System.out.println(len);
    }

    /**
     *
     * @param src 要统计的那个文件夹
     * @return 返回统计后的文件夹大小,单位字节
     */
    public static long getLen(File src) {
        //1. 定义变量进行累加
        long len = 0;
        //2. 获取src里面所有文件和文件夹
        File[] files = src.listFiles();
        //3. 遍历文件夹数组
        for (File file : files) {
            if (file.isFile()) {
                //4. 判断
                len = len + file.length();
            } else {
                //5. 如果是文件夹使用递归继续求大小
                len = len + getLen(file);
            }
        }
        return len;
    }
}

案例六:

/* 统计一个文件夹中每种文件的个数并打印(考虑子文件夹)
* 打印格式如下:
* txt:x个
* doc:x个
* jpg:x个
* */

package com.liming.file01;

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

public class Demo07 {
    public static void main(String[] args) {
        /* 统计一个文件夹中每种文件的个数并打印(考虑子文件夹)
         * 打印格式如下:
         * txt:x个
         * doc:x个
         * jpg:x个
         * */
        File file = new File("D:\\aaa\\bbb");
        Map<String, Integer> map = getCount(file);
        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key + ":" + value + "个");
        }
    }

    /**
     * 文件可能出现类型:
     * a.txt\a.a.txt\aaa(不需要统计)
     *
     * @param src
     */
    public static Map<String, Integer> getCount(File src) {
        //1. 定义Map集合用来统计,键:后缀名 值:出现次数
        Map<String, Integer> map = new HashMap<>();
        //2. 获取src目录下所有文件夹和文件
        File[] files = src.listFiles();
        //3. 遍历获取到的数组
        for (File file : files) {
            //4. 判断,如果是文件就统计
            if (file.isFile()) {
                //a.a.txt
                String name = file.getName();
                String[] arr = name.split("\\.");
                if (arr.length >= 2) {
                    String endName = arr[arr.length - 1];
                    if (map.containsKey(endName)) {
                        //获取键出现的次数
                        int count = map.get(endName);
                        count++;
                        map.put(endName, count);
                    } else {
                        //键没出现过
                        map.put(endName, 1);
                    }
                }
            } else {
                //5. 如果是文件夹,递归
                //sonMap里面存放着子文件中每一种文件的数量
                Map<String, Integer> sonMap = getCount(file);
                //遍历sonMap把里面的数据累加到map集合中去
                Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
                for (Map.Entry<String, Integer> entry : entries) {
                    String key = entry.getKey();
                    int value = entry.getValue();
                    if (map.containsKey(key)) {
                        //存在
                        int count = map.get(key);
                        count = count + value;
                        map.put(key, count);
                    } else {
                        //不存在
                        map.put(key, value);
                    }
                }
            }
        }
        return map;
    }
}

总结

解题思路:
如果涉及子文件问题和多级路径可以考虑使用递归一级一级解决
1.获取src路径下的所有文件和文件夹,存放在数组
2.遍历获取到的数组
3.判断,如果是文件直接执行题目需求
4.判断,如果是文件夹进行递归

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/176831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【My Electronic Notes系列——三极管】

目录 序言&#xff1a; &#x1f3ee;&#x1f3ee;新年的钟声响&#xff0c;新年的脚步迈&#xff0c;祝新年的钟声&#xff0c;敲响你心中快乐的音符&#xff0c;幸运与平安&#xff0c;如春天的脚步紧紧相随&#xff0c;春节快乐&#xff01;春华秋实&#xff0c;我永远与你…

C语言入门(八)——数组

数组的基本概念 数组应用实例:统计随机数 数组应用实例:直方图 字符串 多维数组 数组的基本概念 数组(Array)也是一种复合数据类型&#xff0c;它由一系列相同类型的元素(Element)组成。例如定义一个由4个int型元素组成的数组count: int count[4]; 和结构体成员类似&…

安卓S开机动画流程

安卓S开机动画流程 开机动画是在SurfaceFlinger实例通过调用startBootAnim()启动的&#xff0c;BootAnim是如何启动和结束的&#xff0c;总体框架图如下&#xff1a; 1.SurfaceFlinger进程启动 # /frameworks/native/services/surfaceflinger/surfaceflinger.rc service surf…

linux inode详解

1.inode 和 block 概述. 操作系统的文件数据除了实际内容之外&#xff0c;通常含有非常多的属性&#xff0c;例如Linux操作系统的文件权限与文件属性。文件系统通常会将这两部分内容分别存放在inode和block中。 文件是存储在硬盘上的&#xff0c;硬盘的最小存储单位叫做扇区sec…

行为型模式

1.模版方法 超类中定义了一个算法的框架&#xff0c; 允许子类在不修改结构的情况下重写算法的特定步骤 结构 抽象类&#xff1a;负责给出一个轮廓与骨架&#xff0c;由一个模版方法和若干个基本方法构成 模版方法&#xff1a;按某种顺序调用其包含的基本方法基本方法&#xf…

计算机视觉OpenCv学习系列:第八部分、图像操作-4

第八部分、图像操作-4第一节、图像卷积操作1.图像卷积定义2.卷积函数3.代码练习与测试第二节、高斯模糊1.高斯模糊2.函数解释3.代码练习与测试第三节、像素重映射1.像素重映射定义2.重映射函数3.代码练习与测试学习参考第一节、图像卷积操作 1.图像卷积定义 卷积的基本原理&am…

java spring IOC xml 方式 内部Bean注入

上次说了外部 Bean注入 这次来演示一个内部的 Bean注入 我们先创建一个spring 项目 导入最基本的 spring 包 在项目src目录下创建一个包 cascade cascade包下创建两个类 Dept 部门类 参考代码如下 package cascade;//部门类 public class Dept {private String dname;publi…

windows ssdt

前言 我们 ring 3 跳转 ring0 另一种方式使用sysenter命令。 sysenter 相比起jmp,int xx方式相比速度更快&#xff0c;因为sysenter指令大量的使用了MSR寄存器 存储跳转地址等。 MSR寄存器相关读/写命令 //读取msr寄存器 rdmsr xxxx //写入msr寄存器 wrmsr xxxx其中xxx是ms…

轻量实时操作系统学习(一)

306xH系列产品基于高性能RISC-V CPU核&#xff0c;工作频率最高到200MHz&#xff0c;集成了FPU浮点处理单元&#xff0c;支持浮点乘法&#xff0c;支持浮点乘法&#xff0c;除法和开方等复杂数学运算指令&#xff0c;支持16KB的SRAM和最高160KB的flash存储单元。 该MCU集成最多…

【My Electronic Notes系列——二极管】

目录 序言&#xff1a; &#x1f3ee;&#x1f3ee;新年的钟声响&#xff0c;新年的脚步迈&#xff0c;祝新年的钟声&#xff0c;敲响你心中快乐的音符&#xff0c;幸运与平安&#xff0c;如春天的脚步紧紧相随&#xff0c;春节快乐&#xff01;春华秋实&#xff0c;我永远与…

【目标检测论文解读复现NO.25】基于改进Yolov5的地铁隧道附属设施与衬砌表观病害检测方法

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0c…

【Unity Shader 赛博小人01】UV准备 SD制作特效贴图

写在前面 Unity 卡通渲染 程序化天空盒提到了——“再整个uv1将云片平铺&#xff0c;将uv1对应到世界坐标x轴旋转角、y轴旋转角&#xff0c;消散信息放到顶点色。”&#xff0c;就是这句话&#xff01;我又遇到了几个问题&#xff08;本菜鸡不知道的东西太多太多了&#xff09…

Spring的使用

开篇点题&#xff1a;为什么要用到Spring&#xff1f;参考这篇文章&#xff1a;http://t.csdn.cn/oR5lM一、创建一个Maven项目1.创建一个Maven项目2.添加Spring依赖/框架支持在pom.xml中添加框架的支持&#xff0c;xml配置如下&#xff1a;&#xff08;下载失败参考&#xff1a…

设计模式_自定义Spring框架(IOC)

设计模式_自定义Spring框架&#xff08;IOC&#xff09; 笔记整理自 黑马程序员Java设计模式详解&#xff0c; 23种Java设计模式&#xff08;图解框架源码分析实战&#xff09; Spring使用回顾 自定义spring 框架前&#xff0c;先回顾一下 Spring 框架的使用&#xff0c;从而分…

acwing基础课——快速幂

由数据范围反推算法复杂度以及算法内容 - AcWing 常用代码模板4——数学知识 - AcWing 基本思想&#xff1a; 求一个数的n次时&#xff0c;我们的时间复杂度为O(n),当n特别大时&#xff0c;效率会很低可能超时&#xff0c;此时我们就需要运用到快速幂&#xff0c;将我们的时间…

基于PHP和MySQL的新闻发布系统——【功能优化】

前言 2023年第一篇文章&#xff0c;祝大家在新的一年里“卯”足干劲&#xff0c;在技术上 “兔”飞猛进&#xff01; 上一篇文章 基于PHP和MySQL的新闻发布系统 给大家介绍了制作一个新闻发布系统的主要功能的实现&#xff0c;在文章的末尾还提出了一些需要完善的方面。那么…

Vue3【style-scoped、style-module、类和内联样式、props、练习】

文章目录style-scopedstyle-module类和内联样式props练习style-scoped 可以直接通过style标签来编写样式&#xff0c; 如果直接通过style标签写样式&#xff0c;此时编写的样式是全局样式会影响到所有的组件 可以为style标签添加一个scoped属性&#xff0c;这样样式将成为局部…

为什么会有右值引用?(移动构造、移动赋值)

目录 1、左值引用的缺陷 2、移动构造&#xff1a;解决临时对象的深拷贝 3、拓展&#xff1a;移动赋值 1、左值引用的缺陷 左值引用作为函数参数传递&#xff0c;减少了参数拷贝&#xff1b;但是作为函数返回值&#xff0c;并不适用于所有场景&#xff0c;比如要返回一个临…

Linux——innode

目录 回顾缓冲区 标准错误流的理解 文件系统 Inode VS 文件名 创建/删除/查看文件系统做了什么 软硬链接 动静态库 习题 回顾缓冲区 关掉1&#xff0c;log.txt中没文件是因为&#xff0c;字符串在缓冲区当中&#xff0c;缓冲区还没刷新&#xff0c;我们把fd给关了…

堆的实现及应用

下面用C语言介绍堆的实现以及应用 文章目录1. 堆的简介2. 堆的实现HeapInitHeapDestroyHeapPushHeapPop3. 堆的应用堆排序TopK问题1. 堆的简介 堆是一颗完全二叉树。这里所说的堆是一种非连续的数据结构&#xff0c;与操作系统内存分布的堆是两回事&#xff0c;它们没有任何联…