【JavaSE】基础知识复习(六)(不全)

news2024/12/23 18:07:43

1.File与IO流

File类就是代表系统的文件 / 目录,IO流是用来处理File类的

File类

构造器

分隔符(三种)

第三种File.separator是跨平台的,获取当前操作系统的分隔符

常用方法

  • length()

返回文件大小(字节),如果是目录,返回的是目录本身大小,而不是目录所有文件大小

  • exists()

检测File制定的文件 / 目录路径是否存在

文件遍历 (两种)

public class MyTest {
    public static void main(String[] args) {
        // 1.public String[] list(), 获取当前目录下所有的"一级文件名称"到一个字符串数组中
        File file = new File("D:\\DevelopTools\\IntelliJ IDEA 2023.2.3");
        String[] names = file.list();
        for (String name : names) {
            System.out.println(name);
        }

        System.out.println("-------------------------------------");

        // 2.public File[] listFiles():(重点)获取当前目录下所有的"一级文件对象"到一个文件对象数组中
        File[] files = file.listFiles();
        for (File file1 : files) {
            System.out.println(file1);
        }
    }
}

前置知识

方法递归

递归形式

阶乘

不停调用归回到终结点f(1),return 1,开始递升

代码实现

public class MyTest {
    public static void main(String[] args) {
        System.out.println(recursion(3));
    }
    public static int recursion(int n){
        return (n == 1) ? 1 : recursion(n - 1) * n;
    }
}
内存图

案例:文件搜索

需求:从D:盘中,搜索"WeChat.exe"这个文件,找到后直接输出其位置

文件地址:"D:\\WeChat\\[3.9.11.25]\\WeChat.exe"

思路分析

代码实现
public class MyTest {
    public static void main(String[] args) {
        searchFile(new File("D:/"), "WeChat.exe");
    }
    public static void searchFile(File dir, String fileName){
        // 1.把非法的情况都给拦截住
        // dir参数不能为null,dir必须存在,不能是文件对象
        if(dir == null || !dir.exists() || dir.isFile()){
            System.out.println("无法搜索");
            return;// 代表无法搜索
        }
        // 获取当前目录下的全部一级文件对象
        File[] files = dir.listFiles();

        // 集合对象要存在,集合内容不为空
        if(files != null && files.length > 0){
            // 遍历全部一级文件对象
            for (File f : files){
                // 判断是文件夹还是文件
                if(f.isFile()){
                    // 是文件
                    if(f.getName().contains(fileName)){
                        System.out.println("找到了:" + f.getAbsolutePath());
                    }
                }else {
                    // 是目录,继续重复这个过程(递归)
                    searchFile(f, fileName);
                }
            }
        }
    }
}


字符集

链接到我的之前写的一篇博客:常用编码格式,汉字和字母分别占用多大空间_unicode 占用-CSDN博客

标准ASCII字符集

码点

GBK字符集

Unicode字符集

最初只有美国人用电脑,后来各个国家开始用电脑,每个国家都需要弄一套自己的字符集,但是国际组织担心会乱套,于是呼吁大家不要自己搞,用我的Unicode

UTF-32

是一套Unicode字符集的一套编码方案,这个方案并不被大家所采纳,太浪费空间了,哪怕只是一个字节的标点符号,也需要开辟四个字节的空间,足足大了三倍

UTF-8

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

注意点

编码与解码

常用方法

IO流

FIle类只能操作文件本身,对于文件中数据的操作还得用IO流

怎么学IO流?

流的分类(四种)

IO流的体系

FileInputStream
构造器

常用方法
读取一个字节(性能差&中文乱码)

这是个垃圾代码,开发中不会这么用的,学习一下思路就行

此方法性能很差,读取一个字节就需要调用一次硬盘资源。

程序运行在内存中,数据确实保存在硬盘中,程序调用硬件资源的开销,以及去硬盘中找资源的性能相对于内存来说是很差的

在开发中,应该尽量减少让程序调用硬件资源,以及读取硬盘数据的频次

其二,无法避免的中文乱码,开发环境中,中文编码默认是UTF-8,每次读取一个字节,强行截取掉两个字节,当然乱码了 

必须释放资源

读取多个字节(中文乱码)

相比读取单个字节,减少了调用硬件资源的频次,提升了性能,但是依旧无法避免中文乱码问题

读取多少则倒出多少

15、IO流:文件字节输入流-每次读取多个字节_哔哩哔哩_bilibili

注意观察下图,一共五个字节,第一次读取三个字节,就是前三个[abc]

第二次又用buffer读取三个字节 ,但是就剩下两个字节了,他会进行新值覆盖旧值[66c],这样子就出事了,所以,将buffer看成水桶,那么读取多少就倒出多少

代码优化

依旧无法避免中文乱码

JDK17似乎底层优化了,并不会中文乱码,我试了很多遍,视频里的乱码了,但是并不清楚JDK8还是多少

读取全部字节(两种)
方式一(整数溢出)

其中的强转是有问题的,如果文件大小超过了1.99GB,就会整数溢出

除以 1024*1024*1024

方式二(推荐)

官方提供的方法,好用,不会整数溢出

  • 是如何避免内存溢出的?

如果读取的文件大小大于内存大小,报异常


FileOutputStream

构造器

默认是覆盖文件数据,即先清除文件中的数据,再重写

也可以设置追加模式,给构造器设置true即可

常用方法

写出一个字节


综合案例:文件复制

public class MyTest {
    public static void main(String[] args) throws Exception{
        // 需求:复制照片
        // 1.创建一个字节输入流管道与源文件接通
        FileInputStream fis = new FileInputStream("C:\\Users\\63912\\Desktop\\源文件.txt");
        // 2.创建一个字节输出流管道与目标文件接通
        FileOutputStream fos = new FileOutputStream("D:\\pictures\\copy\\copy.txt");

        byte[] buffer = fis.readAllBytes();
        fos.write(buffer, 0, buffer.length);

        fos.close();
        fis.close();
        System.out.println("复制完成!!");
    }
}
public class MyTest {
    public static void main(String[] args) throws Exception{
        // 需求:复制照片
        // 1.创建一个字节输入流管道与源文件接通
        FileInputStream fis = new FileInputStream("C:\\Users\\63912\\Desktop\\源文件.txt");
        // 2.创建一个字节输出流管道与目标文件接通
        FileOutputStream fos = new FileOutputStream("D:\\pictures\\copy\\copy.txt");

        byte[] buffer = new byte[1024];
        int len;
        while ((len = fis.read(buffer)) != -1){
            fos.write(buffer, 0, len);
        }

        fos.close();
        fis.close();
        System.out.println("复制完成!!");
    }
}

既然是字节级操作,那么图片也是能复制的


释放资源的方式(两种)

什么时候需要释放资源?

后调用的先释放,先调用的后释放

try-catch-finally
  • 之前我们释放资源的方式是有问题的,万一中间有什么异常,他就不会执行closed()方法,就不会释放资源

​​​​​​​

这里不知道CSDN什么bug,不能插入图片了转Typora本地,然后上传CSDN

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

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

相关文章

EcoDev Studio 与 gitlab【拉取项目,切换分支,再修改提交】

1 安装git工具 https://blog.csdn.net/mukes/article/details/115693833 2 创建空项目 3 推送gitlab 1、进入本地该项目目录下,右键Git Bash Here打开git命令窗口 2、初始化本地仓库: git init将本地项目的所有文件添加到暂存区: git a…

EMC学习笔记2——电磁兼容问题分析

分析一个电磁兼容问题一般从三方面入手,分别是骚扰源、敏感源、耦合路径。解决掉其中一个问题,就能解决大部分的电磁兼容问题。 例如:当骚扰源是雷电时,敏感源是电子线路时,我们需要消除的就是耦合电路。 耦合路径就是…

吴恩达机器学习-C2W1L1-神经元和层

在本实验中,我们将探索神经元/单元和层的内部工作原理。特别地,这个实验将与你在课程1中掌握的模型,回归/线性模型和逻辑模型进行类比。本实验室将介绍Tensorflow,并演示如何在该框架中实现这些模型。 包 Tensorflow和Keras Te…

Ubuntu中编译使用ANTs(医学图像配准)含github无法访问问题解决

目录 第一步、修改hosts文件 1.打开https://github.com.ipaddress.com/ 2.打开https://fastly.net.ipaddress.com/github.global.ssl.fastly.net#ipinfo 3.打开hosts文件,并在文件末尾添加如下内容 第二步、编译ANTs 1)首先安装git、cmake以及c编译…

基于DVWA-Brute Force(LowMedium)的渗透测试

Brute force主要是通过爆破达到渗透目的&#xff1a; Low 查看源代码&#xff1a; <?phpif( isset( $_GET[ Login ] ) ) {// Get username$user $_GET[ username ];// Get password$pass $_GET[ password ];$pass md5( $pass );// Check the database$query "SE…

流量分析0.o

[陇剑杯 2021]签到 此时正在进行的可能是__________协议的网络攻击。&#xff08;如有字母请全部使用小写&#xff0c;填写样例&#xff1a;http、dns、ftp&#xff09;。得到的flag请使用NSSCTF{}格式提交。 过滤协议 例子:tcp&#xff0c;udp&#xff0c;arp&#xff0c;i…

基于SpringBoot和Leaflet的全国省会城市风景区分布分析实践

目录 前言 一、空间数据表的设计与实现 1、城市信息数据表 2、风景区信息表设计与实现 3、数据库查询应用 二、WebGIS程序设计与实现 1、使用select中转义字符的使用 2、Leaflet空间信息展示 三、省会城市风景区可视化成果展示 1、哈尔滨市风景区分析 2、南京市风景区…

【6大设计原则】依赖倒置原则:构建灵活软件架构的基石 - 通过代码实例深入解析

1.引言 1.1为什么要学习依赖倒置原则 在软件开发过程中&#xff0c;我们经常需要对代码进行修改和扩展。如果代码之间的耦合度过高&#xff0c;那么在进行修改或扩展时&#xff0c;可能会对其他部分的代码产生影响&#xff0c;甚至引发错误。这就要求我们在编写代码时&#xf…

TransFormer学习的一些重要链接

以下是自己在学习和掌握TransFormer中的一些重要链接: 1. 这篇讲解的我看的最明白和清楚&#xff0c;但是仍要结合代码来加深理解。Transformer模型详解&#xff08;图解最完整版&#xff09;https://zhuanlan.zhihu.com/p/338817680 2. 七月在线-TransFormer的文本分类http…

LabVIEW多协议智能流水线控制与监控系统

在自动化流水线系统&#xff0c;实现对流水线传送带、机械臂、报警系统、扫码机、喷码机等设备的高效控制和实时监控。该系统需要支持多种通信协议&#xff0c;包括UDP、串口、ModbusTCP、HTTP、以及MQTT协议&#xff0c;以确保各个设备间的无缝连接和数据交换。 系统架构与模…

1-安装Elasticsearch

支持一览表 | Elastic 未完待续

postgres.new:在浏览器中构建与AI协作的开源Postgres沙盒

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

海量数据处理商用短链接生成器平台 - 16

第五十四章 DWM层数据处理-Flink异步IO提升性能 第1集 IP解析地理位置问题点和Flink异步IO介绍 简介&#xff1a; IP解析地理位置问题点和Flink异步IO介绍 Flink实时计算处理存在的问题 IP解析地理位置信息&#xff0c;查询是同步查询&#xff0c;存在阻塞&#xff0c;性能不…

Unity(2022.3.38LTS) - 旋转和方向

目录 一. 旋转 二. 方向 三. 总结 四. 扩展-万向锁 一. 旋转 在 Unity 中&#xff0c;物体的旋转可以通过欧拉角和四元数来表示和操作。 欧拉角&#xff1a; 由三个角度值&#xff08;通常表示为 x、y、z &#xff09;来定义旋转。直观易懂&#xff0c;但可能会出现万向…

楼宇控制与智能家居实训室解决方案

一、前言 随着物联网技术、大数据分析以及人工智能技术的不断进步&#xff0c;楼宇自动化和智能家居系统正逐渐改变我们的生活方式和工作方式。这些系统不仅可以提高建筑物的安全性和舒适度&#xff0c;还可以有效降低能耗并提升运营效率。例如&#xff0c;通过智能温控系统可…

无人机视角下的EasyCVR视频汇聚管理:构建全方位、智能化的AI视频监控网络

随着5G、AI、物联网&#xff08;IoT&#xff09;等技术的快速发展&#xff0c;万物互联的时代已经到来&#xff0c;视频技术作为信息传输和交互的重要手段&#xff0c;在多个领域展现出了巨大的应用潜力和价值。其中&#xff0c;EasyCVR视频汇聚平台与无人机结合的AI应用更是为…

快速开发知识付费软件的秘诀:敏捷开发与持续迭代

在竞争激烈的市场环境中&#xff0c;快速推出高质量的知识付费软件是抢占市场先机的关键。敏捷开发与持续迭代作为两种核心的软件开发方法&#xff0c;可以帮助开发团队在短时间内交付功能完善的产品&#xff0c;并通过不断优化来提升用户体验。本文将探讨如何利用敏捷开发与持…

OpenCV的编译(MinGW)

OpenCV的编译&#xff08;MinGW&#xff09; 一、下载opencv 在opencv的官网&#xff08;Releases - OpenCV&#xff09;下载我们需要的opencv的版本&#xff0c;以4.5.4版本为例&#xff1a; 之所以&#xff0c;使用这个4.5.4版本的编译&#xff0c;是因为我使用4.6.0版本的…

2024年8月15日(python管理MySQL数据库 mysql5.7读写分离 配置mycat)

一、pymysql管理数据库 1、搭建主mysql5.7 [rootmysql57 ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz [rootmysql57 ~]# tar -xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz [rootmysql57 ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x…

消息驱动Stream---基于SpringCloud

概要&#xff1a;实际开发中&#xff0c;服务与服务之间的通信经常会使用到消息中间件&#xff0c;而以往使用的一些消息中间件&#xff0c;比如RabbitMQ&#xff0c;该中间件和系统的耦合性非常高&#xff0c;如果我们要将RabbitMQ替换为Kafka&#xff0c;那么系统将会有较大的…