d17(154-168)-勇敢开始Java,咖啡拯救人生

news2024/11/25 2:40:05

目录

方法递归

字符集

编码-解码

IO流

字节流

字节输入流 InputSream

FileInputStream

字节输出流 OutputSream

FileOutputSream

释放资源的方式

try-catch-finallly

try-with-resource

字符流

字符输入流 Reader

FileReader

文件字符输出流 Writer

FileWriter

缓冲流

字节缓冲流 BufferedInputStream BufferedOutputStream

字符缓冲流 BufferedReader BufferedWriter

转换流

字符输入转换流 InputStreamReader

字符输出转换流 OutputStreamWriter

打印流

PrintStream

PrintWriter

数据流

数据输出流 DataOutputStream

数据输入流 DataInputStream

序列化流

对象字节输出流 ObjectOutputStream

对象字节输入流 ObjectInputStream

注意

IO框架

Commons-io


方法递归

方法调用自身

直接递归:方法直接调用自己

间接递归:方法调用其他方法,其他方法又回调方法自己

递归死循环 -> 栈内存溢出错误

递归公式 + 递归终结点 + 其方向要走向终结点

其他应用:文件搜索

    private static void searchFile(File dir, String fileName) throws Exception {
        if(dir == null || !dir.exists() || dir.length() == 0 ){
            System.out.println("没找到");
            return;
        }

        File[] files = dir.listFiles();
        if(files != null && files.length > 0){
            for (File file : files) {
                if (file.isFile()){
                    if (file.getName().contains(fileName)){
                        System.out.println("路径为"+file.getAbsolutePath());
                        // 启动软件
                        Runtime runtime = Runtime.getRuntime();
                        runtime.exec(file.getAbsolutePath());
                    }
                }else {
                    searchFile(file,fileName);
                }
            }
        }
    }
    private static void deleteDir(File dir) {
        if (dir == null || !dir.exists() || dir.length() == 0) {
            return;
        }
        // 是文件则删除
        if (dir.isFile()){
            dir.delete();
            return;
        }
        // 空文件夹则删除
        File[] files = dir.listFiles();
        if (files == null){
            return;
        }
        // 遍历当前文件夹下的所有。是文件则删除,是文件夹再进入
        for (File file : files) {
            if (file.isFile()){
                file.delete();
            }else {
                deleteDir(file);
            }
        }
        dir.delete();
    }
字符集

ASCII 0xxxxxxx 英文数字符号

GBK 1xxxxxxx xxxxxxxx 汉字2 英文数字1

unicode - UTF-8 可变长编码方案 1-4个字节

英文、数字等只占1个字节(兼容ASCII),汉字占3个字节

编码-解码

IO流

I(Input) 输入流:把数据读到内存中

O(Output) 输出流:负责写数据出去

按流中数据的最小单位 可分为:

字节流 适合操作所有类型文件

字符流 只适合操作纯文本

字节流
字节输入流 InputSream
FileInputStream

每次读取一个字节 read()

InputStream is = new FileInputStream(("文件路径"));

int b;
while((b = is.read()) != -1){
    System.out.print((char)b);

is.close();
}

每次读一个字节,读取性能较差,读取中文输出为乱码

每次读取多个字节 read(byte[] buffer)

byte[] buffer = new byte[3];
int len;
while((len = is.read(buffer)) != -1){
    // 读多少,倒多少
    String rs = new String(buffer, 0, len);
    System.out.print(rs);
}
is.close;

读取汉字时有可能出现乱码,因为汉字三个字节可能分开读入了

解决方案:把文件内的所有字节一次性读取

但是还是存在问题

如果文件过大,创建的字节数组也会过大,可能引起内存溢出

因此字符流更适合读写文本,字节流更适合做数据的转移,比如文件复制

字节输出流 OutputSream
FileOutputSream

注意覆盖追加

换行

os.write("\r\n".getBytes());

拷贝文件

复制文本、图片、视频等,任何文件都可以

释放资源的方式
try-catch-finallly

只有虚拟机终止 System.exit(0);时不会执行finally中的内容

不要在finally中return数据

一般用于在程序执行完成之后释放资源

InputStream is = null;

OutputStream os = null;

try{

...}catch(Exception e){

        e.printStackTrace();

}finally{

        try{

                if(os != null)os.close();

        }catch(Exception e){
                e.printStackTrace();

        }

        try{

                if(is != null)os.close();

        }catch(Exception e){
                e.printStackTrace();

        }

}
try-with-resource

字符流
字符输入流 Reader
FileReader

try(
    Reader fr = new FileReader("文件路径");
){
    // 每次读取单个字符
    int c;
    while((c = fr.read()) != -1){
        System.out.print((char)c);
    }
    // 每次读取多个字符
    char[] buffer = new char[3];
    int len;
    while((len = fr.read(buffer)) != -1){
    System.out. print(new String(buffer, 0, len));
    }
}catch(Exception e){
    e.printStackTrace();
}
文件字符输出流 Writer
FileWriter

注意写文件时,是覆盖还是追加

注意:字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效

字符流适合做文本文件的操作(读、写

缓冲流

对原始流进行包装,以提高原始流读写数据的性能

字节缓冲流 BufferedInputStream BufferedOutputStream

原理:字节缓冲输入流自带了8KB缓冲池,字节缓冲输出流也自带了8KB缓冲池

可以修改缓冲池大小

字符缓冲流 BufferedReader BufferedWriter

自带8KB的字符缓冲池,提高字符输入流读取字符数据的性能,提高字符输出流写字符数据的性能

字符缓冲输入流

字符缓冲输出流

低级流不一定比包装流差,缓冲池也不是越大越好

转换流

如果代码编码和被读取的文本编码一致,使用字符流读取文本文件时不会出现乱码,不一致时则会出现乱码

字符输入转换流 InputStreamReader

解决不同编码时,字符流读取文本内容乱码的问题。

先获取文件的原始字节流,再将其按真实的字符集编码转成字符输入流,这样字符输入流中的字符就不乱码了

字符输出转换流 OutputStreamWriter

控制写出去的字符使用指定字符集编码

1.可以调用String的getBytes

        String data = "一串字符";

        byte[] bytes = data.getBytes("GBK");

2.也可以使用字符输出转换流

        获取字符输出流,再按照指定的字符集编码将其转换成字符输出流,以后写出去的字符就会用该字符集编码了

打印流

方便高效的打印数据出去

PrintStream

打印什么、存储什么

PrintWriter

PrintStream和PrintWriter都方便高效,PrintStream继承自字节输出流OutputStream,支持写字节数据的方法,PrintWriter继承自字符输出流Writer,支持写字符数据出去

打印流还可以重定向输出语句:

PrintStream ps = new PrintStream("文件路径");

System.setOut(ps);

System.out.println("要打印的内容");

这样输出语句不会打印在控制台,而是在指定的文件内

数据流

数据输出流 DataOutputStream

允许把数据其类型一并写出去

数据输入流 DataInputStream

用于读取数据输出流写出去的数据

序列化流

对象序列化:把Java对象写入到文件中去

对象反序列化:把文件里的Java对象读出来

对象字节输出流 ObjectOutputStream

把Java对象进行序列化

对象要序列化,必须要实现序列化接口 Serializable

对象字节输入流 ObjectInputStream

把Java对象进行反序列化

注意

1.在序列化时,如果想将对象中某变量不序列化

可以在类中,在变量前加上transient修饰符,此时该成员变量不参与序列化

2.如果要一次性序列化多个对象,可以用ArrayList集合存储多个对象,然后直接对集合进行序列化[因为ArrayList集合已实现序列化接口 Serializable]

IO框架

框架:解决某类问题编写的一套类、接口等

在框架的基础上开发,可以得到优秀的软件架构,提高开发效率

jar包

IO框架:封装了Java的对文件、数据进行操作的代码,提供更简单的方式操作文件、读写数据

Commons-io

把要用的框架下载好,拷贝要用的jar包,在项目中新建文件夹lib,把jar包粘贴在该文件夹中,右键文件夹Add as Library

Files类也有很多功能啊,好卷,请为我提供呆瓜式编程

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

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

相关文章

(done) 什么是马尔可夫链?Markov Chain

参考视频:https://www.bilibili.com/video/BV1ko4y1P7Zv/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 如下图所示,马尔可夫链条实际上就是 “状态机”,只不过状态机里不同状态之间的边上是 “…

李廉洋:5.13黄金原油美盘行情分析,必看策略。

黄金消息面分析:机构最新调查中的一些受访者表示,美国最大的科技股不仅是对创新行业的押注,而且可能是对冲通胀的工具。46%的受访者表示,数十年来一直是避险之选的黄金仍被视为抵御价格上涨风险的最佳保障。但近三分之一的人表示&…

【eclipse】如何在IDE里创建一个Java Web项目?

如何在eclipse中创建一个动态Web项目并成功运行? 一、 最终效果 懒得写那么多了…我也不知道该怎么写了,有点乱,有问题可以在评论里留言,我看到会解决的,在这个过程中也踩到了一些坑,但好在有CSDN帮助解决…

GEE数据集——东南亚区域油棕种种植分布(油棕榈树种植园的概率)数据集

森林数据伙伴关系围绕对全球商品驱动的森林砍伐、森林退化和恢复工作的全球监测,加强合作与应用。 世界各国政府和公司都承诺帮助制止砍伐森林和加快恢复,以避免气候变化带来的最坏影响,防止生物多样性丧失,保护森林对人类和自然…

JavaEE之线程(4)——线程安全、线程安全的原因,synchronized关键字

前言 在本栏的前面的内容中,我们介绍了线程的创建、Thread 类及常见方法、线程的状态,今天我们来介绍一下关于线程的另一个重点知识——线程安全。 一、线程安全 基本概念: 线程安全的确切定义是复杂的,但我们可以这样认为&…

微前端无界方案

微前端无界 无界 官方文档 主应用 1、引入 // 无框架时使用wujie import Wujie from wujie // 当结合框架时使用wujie-xxx // import Wujie from "wujie-vue2"; // import Wujie from "wujie-vue3"; // import Wujie from "wujie-react";cons…

想搭建AI知识库的企业看这篇就够了

企业要想在激烈的竞争中脱颖而出,有一套高效、智能的知识管理系统是非常重要的。搭建AI知识库能够帮助企业整合、分类、检索和应用知识,因此成为众多企业的第一选择。对于想要搭建AI知识库的企业来说,应该注意哪些方面呢?本文将从…

专业网站设计方案

当前互联网的快速发展和普及,使得网站设计成为了一个极其重要的环节。一个好的网站设计方案将能够吸引更多的访问者,提高用户体验,增强品牌形象。下面将为您介绍一个专业的网站设计方案。 首先,一个专业的网站设计方案应该具备清晰…

APP反抓包 - 客户端证书验证进阶(代码混淆)

1.关于混淆 在安卓开发中,对于第三方的包是可以进行混淆的,例如:OKHttp3.Http.Cert.check 被混淆后可以是a.f.c.b 形式。在安卓开发中,系统包是无法混淆的,例如:java.security.KeyStore不会被混淆。由于这种的情况的存在,再次审示我们之前的通用脚本,就会发现他是不通用…

2000-2022年上市公司供应链效率数据(含原始数据+结果)

2000-2022年上市公司供应链效率数据(含原始数据结果) 1、时间:2000-2022年 2、指标:年份、股票代码、省份、城市、区县、省份代码、城市代码、区县代码、首次上市年份、上市状态、股票简称、行业名称、行业代码、库存周转率、供…

单页源码加密屋zip文件加密API源码

简介: 单页源码加密屋zip文件加密API源码 api源码里面的参数已改好,往服务器或主机一丢就行,出现不能加密了就是加密次数达到上限了,告诉我在到后台修改加密次数 点击下载

解决宝塔Nginx和phpMyAdmin配置端口冲突问题

问题描述 在对基于宝塔面板的 Nginx 配置文件进行端口修改时,我注意到 phpMyAdmin 的端口配置似乎也随之发生了变化! 解决方法 官方建议在处理 Nginx 配置时,应避免直接修改默认的配置文件,以确保系统的稳定性和简化后续的维护…

过拟合和欠拟合的学习

1.什么拟合 就是说这个曲线能不能很好地描述某些样本数据,并且拥有较好的泛化能力。 2.什么是过拟合 过拟合就是曲线太过于贴切训练数据的特征了,在训练集上表现得非常优秀,近乎完美的预测/区分了所有得数据,但是在新的测试集上…

Springboot整合 Spring Cloud Gateway

1.Gateway介绍 1.是spring cloud官方推出的响应式的API网关框架,旨在为微服务架构提供一种简单有效的API路由的管理方式,并基于Filter的方式提供网关的基本功能,例如:安全认证,监控,限流等等。 2.功能特征…

java图片水印字体乱码问题

问题描述:在linux Centos-7.5_64bit系统的其他服务器上不乱码,在部署项目的正式服务器乱码 水印字体设置是 微软雅黑 Font wordFont new Font("微软雅黑", Font.ITALIC,(srcImgHeightsrcImgWidth)/50); 一.Springboot项目,部署在…

SSH 免密登录,设置好仍然需要密码登录解决方法

说明: ssh秘钥登录设置好了,但是登录的时候依然需要提供密码 查看系统安全日志,定位问题 sudo cat /var/log/auth.log或者 sudo cat /var/log/secure找到下面的信息 Authentication refused: bad ownership or modes...(网上的…

视频号小店怎么选品?给大家分享三个选品思维,让你快速脱颖而出

哈喽,大家好,我是电商花花,专注做电商的花花。 为什么我会说视频号小店是我们今年翻身,赚钱的最佳选择? 因为现在视频号小店不管是在流量上还是市场上,视频号小店都有着属于自己的优势,只要我…

Spring MVC(五) 文件上传

1 单文件上传 在程序开发中,有时候需要上传一些文件。我们在学习Servlet的时候,也做过文件上传的操作,只不过基于Servlet的文件上传操作起来过于复杂,因此所有的MVC框架都提供了自己的文件上传操作,基本上都是基于File…

SpringCloud微服务01-MybatisPlus-Docker

https://b11et3un53m.feishu.cn/wiki/MWQIw4Zvhil0I5ktPHwcoqZdnec 一、微服务介绍 单体架构所有功能集群在一个架构中,难以维护复杂需求 微服务之间是不同的TomCat要跨服务查询, 学习是如何拆分单体架构为微服务 二、MybatisPlus 1.快速入门 ①入门…

Win10弹出这个:https://logincdn.msauth.ne

问题描述: Win10脚本错误 Windows10家庭版操作系统开机后弹出这个 https://logincdn.msauth.net/shared/1.0/content/js/ConvergedLogin_PCore_vi321_9jVworKN8EONYo0A2.js 解决方法: 重启计算机后手动关闭第三方安全优化软件,然后在任务管理…