Java基础-File

2023-11-16

上一篇Java基础-Stream流

1、file和IO的概述

思考:以前是如何存储数据的?

int a = 10;
int [] arr = {1,2,3,4,5};
ArrayList<String> list = new ArrayList<>();

弊端是什么?
不能永久化存储,只要代码运行结束,所有数据都会丢失。
思考:计算机中,有没有一个硬件可以永久化存储?
我们可以对硬盘进行哪些操作?
在这里插入图片描述
对文件进行读写的前提条件?
我们得知道这个文件在哪
IO就可以对硬盘中的文件进行读写
File表示要读写的文件在哪,也可以对文件进行创建,删除等操作
IO流是什么?
1 ,可以将数据从本地文件中读取出来
2 ,可以将数据从内存保存到本地文件
File类是什么?
1,在读写数据时告诉虚拟机要操作的(文件/文件夹)在哪
2,对(文件/文件夹)本身进行操作。包括创建,删除等。

2、Flie的构造方法

在这里插入图片描述

public class FileDemo1 {

    public static void main(String[] args) {
        //method1();//抽取方法快捷键:Ctrl+alt+m
        //method2();
        //method3();
    }

    private static void method3() {
        //File​(File parent, String child)      从父抽象路径名和子路径名字符串创建新的File实例
        File file1 = new File("C:\\bianchengid");
        String path = "a.txt";
        File file = new File(file1,path);
        System.out.println(file);//C:\KuGou\a.txt
    }

    private static void method2() {
        //File​(String parent, String child)    从父路径名字符串和子路径名字符串创建新的File实例
        String path1 = "C:\\bianchengid";
        String path2 = "a.txt";
        File file = new File(path1,path2);//把两个路径拼接.
        System.out.println(file);//C:\KuGou\a.txt
    }
    
    private static void method1() {
        //File​(String pathname)        通过将给定的路径名字符串转换为抽象路径名来创建新的File实例
        String path = "C:\\bianchengid\\a.txt";
        File file = new File(path);
        //问题:为什么要把字符串表示形式的路径变成File对象?
        //就是为了使用File类里面的方法.
    }
}

3、File-绝对路径和相对路径

在这里插入图片描述

4、File创建功能

在这里插入图片描述

public class FileDemo3 {
    public static void main(String[] args) throws IOException {
        //public boolean createNewFile()    创建一个新的空的文件
                //注意点:
                    //1.如果文件存在,那么创建失败,返回false
                    //2.如果文件不存在,那么创建成功,返回true
                    //3.createNewFile方法不管调用者有没有后缀名,只能创建文件.

        //public boolean mkdir()            创建一个单级文件夹
                //注意点:
                    //1.只能创建单级文件夹,不能创建多级文件夹
                    //2.不管调用者有没有后缀名,只能创建单级文件夹

        //public boolean mkdirs()           创建一个多级文件夹
                //注意点:
                    //1,可以创建单级文件夹,也可以创建多级文件夹
                    //2.不管调用者有没有后缀名,只能创建文件夹

        //疑问:作者:编程ID
            //既然mkdirs能创建单级,也能创建多级.那么mkdir还有什么用啊? 是的

        //method1();

        //method2();

        File file = new File("C:\\KuGou\\aaa.txt");
        boolean result = file.mkdirs();
        System.out.println(result);


    }

    private static void method2() {
        File file = new File("C:\\KuGou\\aaa.txt");
        boolean result = file.mkdir();
        System.out.println(result);
    }

    private static void method1() throws IOException {
        File file1 = new File("C:\\KuGou\\aaa");
        boolean result1 = file1.createNewFile();
        System.out.println(result1);
    }
}

在这里插入图片描述

public class FileDemo4 {
    //注意点:
        //1.不走回收站的.
        //2.如果删除的是文件,那么直接删除.如果删除的是文件夹,那么能删除空文件夹
        //3.如果要删除一个有内容的文件夹,只能先进入到这个文件夹,把里面的内容全部删除完毕,才能再次删除这个文件夹
    //简单来说:
        //只能删除文件和空文件夹.作者:编程ID
    public static void main(String[] args) {
        //method1();
        File file = new File("C:\\KuGou");
        boolean result = file.delete();
        System.out.println(result);
    }

    private static void method1() {
        File file = new File("C:\\KuGou\\a.txt");
        boolean result = file.delete();
        System.out.println(result);
    }
}

5、File-判断和获取功能

在这里插入图片描述

public class FileDemo5 {
    //public boolean isDirectory()  测试此抽象路径名表示的File是否为目录
    //public boolean isFile()       测试此抽象路径名表示的File是否为文件
    //public boolean exists()       测试此抽象路径名表示的File是否存在
    //public String getName()       返回由此抽象路径名表示的文件或目录的名称
                //注意点:
                    //1.如果调用者是文件,那么获取的是文件名和后缀名
                    //2.如果调用者是一个文件夹,那么获取的是文件夹的名字
    public static void main(String[] args) {
        //method1();
        //method2();

        //method3();

        File file = new File("a.txt");
        String name = file.getName();
        System.out.println(name);

        File file1 = new File("C:\\KuGou");
        String name2 = file1.getName();
        System.out.println(name2);
    }

    private static void method3() {
        File file = new File("a.txt");
        boolean result = file.exists();
        System.out.println(result);
    }

    private static void method2() {
        File file = new File("C:\\KuGou");
        boolean result1 = file.isFile();
        boolean result2 = file.isDirectory();
        System.out.println(result1);
        System.out.println(result2);
    }

    private static void method1() {
        File file = new File("C:\\KuGou\\a.txt");
        boolean result1 = file.isFile();
        boolean result2 = file.isDirectory();
        System.out.println(result1);
        System.out.println(result2);
    }
}

6、File-listFile

在这里插入图片描述

public class FileDemo6 {

    public static void main(String[] args) {

       File file = new File("D:\\aaa");
        File[] files = file.listFiles();//返回值是一个File类型的数组
        System.out.println(files.length);
        for (File path : files) {
            System.out.println(path);
        }
        //进入文件夹,获取这个文件夹里面所有的文件和文件夹的File对象,并把这些File对象都放在一个数组中返回.
        //包括隐藏文件和隐藏文件夹都可以获取.作者:编程ID
        //注意事项:
            //1.当调用者是一个文件时
            //2,当调用者是一个空文件夹时
            //3.当调用者是一个有内容的文件夹时
            //4.当调用者是一个有权限才能进入的文件夹时
    }
}

7、案例:File的练习

  • 练习一:在当前模块下的aaa文件夹中创建一个a.txt文件
public class Test1 {
    public static void main(String[] args) throws IOException {
        //练习一:在当前模块下的aaa文件夹中创建一个a.txt文件
       /* File file = new File("filemodule\\aaa\\a.txt");
        file.createNewFile();*/
        //注意点:文件所在的文件夹必须要存在.

        File file = new File("filemodule\\aaa");
        if(!file.exists()){
            //如果文件夹不存在,就创建出来
            file.mkdirs();
        }
        File newFile = new File(file,"a.txt");
        newFile.createNewFile();
    }
}
  • 练习二:删除一个多级文件夹
 public class Test2 {
    public static void main(String[] args) {
        //练习二:删除一个多级文件夹
        //delete方法
        //只能删除文件和空文件夹.
        //如果现在要删除一个有内容的文件夹?
        //先删掉这个文件夹里面所有的内容.
        //最后再删除这个文件夹

        File src = new File("C:\\Users\\apple\\Desktop\\src");
        deleteDir(src);

    }

    private static void deleteDir(File src) {
        //先删掉这个文件夹里面所有的内容.
        //递归 方法在方法体中自己调用自己.
        //注意: 可以解决所有文件夹和递归相结合的题目
        //1.进入 --- 得到src文件夹里面所有内容的File对象.
        File[] files = src.listFiles();
        //2.遍历 --- 因为我想得到src文件夹里面每一个文件和文件夹的File对象.
        for (File file : files) {
            if(file.isFile()){
                //3.判断 --- 如果遍历到的File对象是一个文件,那么直接删除
                file.delete();
            }else{
                //4.判断
                //递归
                deleteDir(file);//参数一定要是src文件夹里面的文件夹File对象
            }
        }
        //最后再删除这个文件夹
        src.delete();
    }
}
  • 练习三:统计一个文件夹中每种文件的个数并打印。

打印格式如下:
txt:3个
doc:4个
jpg:6个

public class Test3 {
    public static void main(String[] args) {
        //统计一个文件夹中,每种文件出现的次数.
        //统计 --- 定义一个变量用来统计. ---- 弊端:同时只能统计一种文件
        //利用map集合进行数据统计,键 --- 文件后缀名  值 ----  次数

        File file = new File("filemodule");
        HashMap<String, Integer> hm = new HashMap<>();
        getCount(hm, file);
        System.out.println(hm);
    }

    private static void getCount(HashMap<String, Integer> hm, File file) {
        File[] files = file.listFiles();
        for (File f : files) {
            if(f.isFile()){
                String fileName = f.getName();
                String[] fileNameArr = fileName.split("\\.");
                if(fileNameArr.length == 2){
                    String fileEndName = fileNameArr[1];
                    if(hm.containsKey(fileEndName)){
                        //已经存在
                        //将已经出现的次数获取出来
                        Integer count = hm.get(fileEndName);
                        //这种文件又出现了一次.
                        count++;
                        //把已经出现的次数给覆盖掉.
                        hm.put(fileEndName,count);
                    }else{
                        //不存在
                        //表示当前文件是第一次出现
                        hm.put(fileEndName,1);
                    }
                }
            }else{
                getCount(hm,f);
            }
        }
    }
}

结束语

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java基础-File 的相关文章

随机推荐

  • 解决在typescript里获取axios返回值报错的问题,Property ‘profile‘ does not exist on type ‘AxiosResponse<any>‘

    如果你是用的vuecli创建的项目 那么请在res文件夹下新建axios d ts文件 添加以下内容 eslint disable no undef eslint disable no unused vars import as axios
  • 使用艺术二维码API接口生成个性化二维码(不会代码也可以)

    目录 前言 介绍 一 申请API接口 二 进行二维码信息的配置 配置后 代码会直接生成 1 基础参数 默认参数 2 进行二维码重要信息配置 2 1二维码类型 2 2二维码内容 2 3绘制指令 3 次要部分 3 1二维码组合 3 2预设背景风
  • 如何使用 ChatGP在TTPU(张量处理单元)上训练模型的指令

    推荐 将NSDT场景编辑器加入你的3D工具链 3D工具集 NSDT简石数字孪生 ChatGPT 作为您的专家助手 ChatGPT 可以帮助我们学习新的编程语言 课程 技术和技能 它已成为许多寻求改进工作流程或学习新事物的专业人士的首选工具
  • Linux中的软件管家——yum

    目录 编辑 一 软件安装的方式 二 对yum的介绍 1 yum的作用 2 yum的库 三 yum下载软件的操作 1 yum list 2 yum install 3 yum remove 四 yum源的转换 一 软件安装的方式 软件安装的方
  • MIT新研发的芯片将神经网络功耗降低95%

    内容来源 ATYUN AI平台 近日 麻省理工学院 MIT 的工程师们设计了一种芯片 这种芯片能将神经网络计算的速度提高3到7倍 同时还能将耗电量降低94 95 这大大减少了在芯片存储器和处理器之间来回传输数据的需要 这可能使得我们可以在智
  • 小样本图像分类研究综述

    https kns cnki net kcms2 article abstract v 3uoqIhG8C44YLTlOAiTRKibYlV5Vjs7ioT0BO4yQ4m mOgeS2ml3UDKtyAQtTA0dGC TDvW fPi0
  • 华为OD机试真题 Java 实现【完美走位】【2022.11 Q4】

    题目描述 输入一个长度为4的倍数的字符串 字符串中仅包含WASD四个字母 将这个字符串中的连续子串用同等长度的仅包含WASD的字符串替换 如果替换后整个字符串中WASD四个字母出现的频数相同 那么我们称替换后的字符串是 完美走位 求子串的最
  • vue+播放直播视频流(websocket的流文件)

    前言 之前分享的有 rtmp直播流 flv直播流的一些方法 这里分享下 播放 websocket的直流的方法 使用的方法是JSMpeg JSMpeg是JS写的视频 音频解码器 能使用WebGL Canvas2D渲染以及WebAudio声音输
  • Linux14.04下安装网易云音乐和搜狗输入法(太棒了!!!)

    本文转载于 http blog csdn net tao 627 article details 51535294 注 本人比较喜欢挺音乐 一直用的是Linux版本 一直苦苦的用着网页版的网易云音乐 哎呀 反正不太好 不舒服 今天由于其他原
  • React 从零开始学习(一) —— 搭建项目

    React 文档地址 https react docschina org docs create a new react app html 简介 React 是一个用于构建用户界面的 JAVASCRIPT 库 React 主要用于构建 UI
  • 如何通过JAVA代码实现多线程分段下载+断点续传

    多线程下载技术是很常见的一种下载方案 这种方式充分利用了多线程的优势 在同一时间段内通过多个线程发起下载请求 将需要下载的数据分割成多个部分 每一个线程只负责下载其中一个部分 然后将下载后的数据组装成完整的数据文件 这样便大大加快了下载效率
  • matplotlib.pyplot.plot()参数详解

    https matplotlib org api pyplot summary html 在交互环境中查看帮助文档 import matplotlib pyplot as plt help plt plot 以下是对帮助文档重要部分的翻译
  • CloudCompare——计算点云的法向量

    目录 1 Computing normals on a cloud 2 点云法线计算结果 3 反转法线方向 Normals gt Invert 4 With Minimum Spanning Tree 5 With Fast Marchin
  • AutoCAD 二次开发之 ObjectARX 环境搭建

    AutoCAD2017 VS2015 Win7 Win10 第一步 安装ObjectARX SDK 库 解压 ObjectARX SDK 文件到指定路径 C ObjectARX 避免出错 使用默认路径 第二步 安装向导程序 创建注册表 新建
  • 使用JestClient连接elasticsearch-5.x对数据进行分组聚合

    原本数据存放在mysql中 项目需求是从mysql中查出来计算推送给前端 但是随着数据量增大 我们的查询语句也复杂 性能会明显下降 所以就考虑干脆存放到elasticsearch中 查询计算都方便 于是去和公司专门负责es平台服务的人对接
  • IT项目管理大作业-个人报告

    在本次IT项目管理大作业中我主要负责了寻找对应模块和工具的工作 主要职责就是负责百度搜索 为开发人员和测试人员提供支持 虽然在本次大作业的实际执行中 由于我实习白天确实很忙外加团队开发人员都有很强的开发能力 因此基本上开发人员和测试人员还是
  • JAVA和C++区别都有哪些?

    转载自品略图书馆 http www pinlue com article 2020 05 1022 4710469487040 html 这是Java与C 区别的一个比较完整的答案 大家可以学习一下 JAVA和C 都是面向对象语言 也就是说
  • shiro使用自定义realm实现数据认证

    自定义realm实现数据认证 在开发中 有时会与一些nosql或者其他地方保存的数据进行认证 这时候 shiro定义的那些realm类可能不能满足实际的功能需求 这时候我们可以通过自定义一个realm来沟通这些数据 实现认证和权限控制 首先
  • Python数据挖掘进阶--泰坦尼克号案例分析

    一 概念介绍 1 机器学习 机器学习算法来建立模型 当有新的数据过来 通过模型能够进行预测 2 特征 features 和标签 labels 特征 数据的属性 通过这些特征可以代表数据的特点 例如Excel的字段列名 也叫做解释变量或自变量
  • Java基础-File

    File 1 file和IO的概述 2 Flie的构造方法 3 File 绝对路径和相对路径 4 File创建功能 5 File 判断和获取功能 6 File listFile 7 案例 File的练习 上一篇Java基础 Stream流
Powered by Hwhale