java——File类和字符集

目录

  • File类
    • File类的常用操作:
    • 案例:文件搜索的实现
    • 案例:递归文件夹删除
  • 字符集
    • 几种常见的字符集
    • 总结
    • 字符集的编码和解码

File类

File是java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)

File类的常用操作:

获取文件信息(大小,文件名,修改时间)
判断文件的类型
创建文件/文件夹
删除文件/文件夹
遍及文件夹

注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。

20240203-100716-o8.png

File类创建文件夹方法
20240203-101733-7A.png

File类删除文件夹方法
20240203-101817-dm.png

File类提供的遍历文件实的功能
20240203-102245-FS.png

使用listFiles方法时的注意事项:

  • 当主调是文件,或者路径不存在时,返回null
  • 当主调是空文件夹时,返回一个长度为0的数组
  • 当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回
  • 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
  • 当主调是一个文件夹,但是没有权限访问该文件夹时,返回null

案例:文件搜索的实现

需求:从D:盘中,搜索“QQ.exe”这个文件,找到后直接输出其位置。
分析:
① 先找出D:盘下的所有一级文件对象
② 遍历全部一级文件对象,判断是否是文件
③ 如果是文件,判断是否是自己想要的
④ 如果是文件夹,需要继续进入到该文件夹,重复上述过程

代码实现如下:

import java.io.File;

public class FileSerch {
    public static void main(String[] args) {
        searchFile(new File("/Users/mac/tao/study/code_all/"), "security.zip");
    }

    /**
     * 去目录下搜索某个文件
     *
     * @param dir      目录
     * @param fileName 搜索的文件名称
     */
    public static void searchFile(File dir, String fileName) {
        // 1、把非法的情况部兰截住
        if (dir == null && dir.exists() && dir.isFile()) {
            return;//代表无法搜索
        }

        // 2、 dir不是nul1,存在,一定是目录对象。
        // 获取当前目录下的全部一级文件对象。
        File[] files = dir.listFiles();
        // 3、判断当前目录下是否存在一级文件对象,以及是否可以拿到一级文件对象。
        if (files != null && files.length > 0) {
            // 4、遍历全部一级文件对象。
            for (File f : files) {
                // 5、判断文件是否是文件,还是文件夹
                if (f.isFile()) {
                    // 是文件,判断这个文件名是否是我们要找的
                    if (f.getName().contains(fileName)) {
                        System.out.println("找到了:" + f.getAbsolutePath());
                    }
                } else {
                    //是文件夹,继续重复这个过程(递归)
                    searchFile(f, fileName);
                }
            }
        }
    }
}

案例:递归文件夹删除

1.判断文件是否合法或为空
2.判断是否为空文件夹或者是否为文件,如果是则删除
3.dir存在且是文件夹,拿到里面的一级文件夹对象
4.如果是有内容的文件夹,先干掉里面的文件,再干掉自己

代码实现如下:

import java.io.File;

public class FilesDelete {
    public static void main(String[] args) {
        File dir = new File("/Users/mac/tao/工作相关的副本/");
        deleteDir(dir);
    }

    public static void deleteDir(File dir) {
        if (dir == null || !dir.exists()) {
            return;
        }
        if (dir.isFile()) {
            dir.delete();
            return;
        }
        // 1. dir存在且是文件夹,拿到里面的一级文件夹对象
        File[] files = dir.listFiles();
        if (files == null) {
            return;
        }
        // 2. 这是一个有内容的文件夹,先干掉里面的文件,再干掉自己
        for (File file : files) {
            if (file.isFile()) {
                file.delete();
            } else {
                deleteDir(file);
            }
        }
        dir.delete();
    }
}

字符集

几种常见的字符集

标准ASCII字符集
ASCl(American Standard Code for Information Interchange):美国信息交换标准代码,包括了英文、符号等。
标准ASCI使用1个字节存储一个字符,首尾是0,总共可表示128个字符,对美国佬来说完全够用。

GBK(汉字内码扩展规范,国标)
汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储。
注意:GBK兼容了ASCII字符集。
GRk规定:汉字 的第一个字节的第一位必须是1

Unicode字符集(统一码,也叫万国码)
Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
UTF-32 4个字节表示一个字符 有容乃大
缺点:奢侈!占存豬空间,通信效率变低!

UTF-8
是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节
英文字符、数宇等只占1个字节(兼容标准ASCI编码),汉字字符占用3个字节。

编码方式示例:
20240222-033928-J1.png

注意:技术人员在开发时都应该使用UTF-8编码!

总结

ASCll字符集:只有英文、数字、符号等,占1个字节。
GBK字符集:汉字占2个字节,英文、数字占1个字节。
UTF-8字符集:汉字占3个字节,英文、数字占1个字节

注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码
注意2:英文,数字一般不会乱码,因为很多字符集都兼容了ASCII编码。

字符集的编码和解码

编码:把字符按照指定字符集编码成字节。
解码:把字节按照指定字符集解码成字符。

java中提供的字符编码和解码方法
20240222-035145-4s.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聊聊JVM运行时数据区的堆内存

聊聊JVM运行时数据区的堆内存 内存模型变迁: Java堆在JVM启动时创建内存区域去实现对象、数组与运行时常量的内存分配,它是虚拟机管理最大的,也是垃圾回收的主要内存区域 。 内存模型变迁: 为什么要有年轻区和老年区?…

中兴助力低空经济发展,携山东移动完成5G-A通感一体商用验证

日前,中兴通讯在5G-A通感一体化技术研究和商用落地领域实现新突破。具体来说,中兴通讯联手山东移动,率先完成了5G-A(5G-Advanced)通感一体化技术试点,完成对低空无人机的通信感知融合测试。据悉&#xff0c…

java面试题之mysql篇

1、数据库索引 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。 索引的一个主要目的就是加快检索…

数据结构day4

实现创建单向循环链表、创建结点、判空、输出、头插、按位置插入、尾删、按位置删除 loop_list.c #include "loop_list.h" loop_p create_head() {loop_p L(loop_p)malloc(sizeof(loop_list));if(LNULL){printf("空间申请失败\n");return NULL;}L->le…

clip_as_service学习

参考:clip_as_service学习过程(一)——安装客户端与服务端_clip-as-service-CSDN博客 CLIP-as-service 0.8.3 documentation (jina.ai) pip3 install clip-client /usr/local/python3/bin/python3.7 -m pip install --upgrade pip pip3 install clip-server pyt…

boost搜索引擎

boost搜索引擎 1. 项目背景1.1 搜索引擎基本原理1.2 Boost库1.3 项目的目标 2. Boost搜索引擎宏观流程3. 技术栈与环境3.1 技术栈3.2 环境 4. 认识什么是索引4.1 正排索引4.2 倒排索引4.3 我们如何分词?4.4 模拟查找过程 5. 数据处理5.1 下载boost库到本地5.2 认识标…

IOS不使用默认的mainStroryboard作为首个controller的方法

步骤1: 删除info.plist文件下的一条配置,如图 步骤2: 编辑AppDelegate.m,参考以下代码 interface AppDelegate () //property (strong, nonatomic) UIWindow * window; property(nonatomic,strong) UIWindow * win; property(…

接近于pi的程序

在一个平静的午后,两个神秘的数字悄然相遇了。它们分别是-1031158223和-328227871。这两个数字看起来普普通通,但谁知它们背后隐藏着一段令人惊叹的奇幻之旅。 这两个数字其实是π的两位探险家,它们决定通过一次除法运算来探索π的奥秘。它们…

影响KNN算法的其它因素及欧式距离方案流程

预测并不是特别准确原因 四大原因 1. 预测模型的参数不够好,上篇文章K的取值问题,可以解决; 2. 影响因子不够多,这个需要增加维度,如2维,(x,y); 3. 样本数量不够,这个需要更多的数据采集,才能保证数据的精准度; 4. 预测选取模型不够好,这个只能重新选择其它模型…

VSCode中打开md文件的智能提示

VSCode中打开md文件的智能提示 vscode中md的只能提示是默认关闭的,要打开必须要做些设置. 搜了好多文章,都是坑! 明明没设置成功,参数类型不对还信誓旦旦的坑自己同胞! 也难怪国内人学的那么难,反而国外学的很简单! 找了以下外面的资料,还是隔壁的人认真,给出了以下方法,测试成…

Sqli-labs靶场第11关详解[Sqli-labs-less-11]

Sqli-labs-Less-11 前言: SQL注入的三个条件: ①参数可控;(从参数输入就知道参数可控) ②参数过滤不彻底导致恶意代码被执行;(需要在测试过程中判断) ③参数带入数据库执行。&…

maven插件wagon-ssh、os-maven-plugin、buildnumber-maven-plugin使用详解

文章目录 前言一、os-maven-plugin的使用二、buildnumber-maven-plugin使用1、时间戳策略2、数字策略 三、wagon-ssh使用1、上传文件/文件夹2、执行Linux命令或者shell脚本 总结 前言 有时我们在构建项目时,希望能自动生成版本号或者生成不同操作系统标识的版本后缀…

力扣日记2.22-【回溯算法篇】47. 全排列 II

力扣日记:【回溯算法篇】47. 全排列 II 日期:2023.2.22 参考:代码随想录、力扣 47. 全排列 II 题目描述 难度:中等 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 示例 1: 输…

07 Redis之持久化(RDB(Redis DataBase) + 写时复制 + AOF(Append Only File)+混合持久化)

4 Redis持久化 Redis 是一个内存数据库,然而内存中的数据是不持久的,若主机宕机或 Redis 关机重启,则内存中的数据全部丢失。 当然,这是不允许的。Redis 具有持久化功能,其会按照设置以快照或操作日志的形式将数据持…

用这款APP,世界听你的!

在这个科技日新月异的时代,我们的生活被各种手机软件所包围。几乎每个人都有一个甚至多个手机,你是否也有遇到过需要远程操作自己某一台手机的场景呢?今天,我要向大家推荐一款神奇的手机远程操作神器,让你可以随时随地…

vue3中ref创建变量取值时自动补充 .value 插件 volar

插件 TypeScript Vue Plugin (Volar) 设置中配置

HMI界面:是工业自动化的“窗口”,大有用武之地。

Hello,我是大千UI工场,本期分享HMI人机交互界面在工业自动化领域的应用,关注大千,学习N多UI干货,有设计需求,我们也可以接单。 HMI(Human Machine Interface,人机界面)在…

C++:派生类的生成过程(构造、析构)

目录 派生类的生成过程 派生类的构造函数与析构函数: 构造函数: 派生类组合类的构造和析构: 构造函数和析构函数调用顺序: 派生类的生成过程 三步骤: 吸收基类(父类)成员:实现代…

Java+Vue:宠物猫认养系统的未来之路

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

C++初阶:容器适配器priority_queue常用接口详解及模拟实现、仿函数介绍

介绍完了stack和queue的介绍以及模拟的相关内容后:C初阶:容器适配器介绍、stack和queue常用接口详解及模拟实现 接下来进行priority_queue的介绍以及模拟: 文章目录 1.priority_queue的介绍和使用1.1priority_queue的初步介绍1.2priority_que…