IO流(二)

目录

一.文件拷贝

1.小文件拷贝

2.FileInputStream的读取问题

二.捕获异常

三.字符集

1.GBK

英文存储(单字节)

中文存储(双字节)

2.Unicode

3.乱码

原因

规避乱码的方式

四.字符流

FileReader

无参

有参

FileWriter


一.文件拷贝

1.小文件拷贝

       //输入流就是原文件
        FileInputStream fis=new FileInputStream("a.txt");
        //输出流就是目的地
        FileOutputStream fos=new FileOutputStream("b.txt");
        int b;
        while((b=fis.read())!=-1){
            fos.write(b);
        }
        //先打开的流后关闭
        fos.close();
        fis.close();

2.FileInputStream的读取问题

如果文件过大,速度就会很慢,因为一次只拷贝一个字节

 FileInputStream fis=new FileInputStream("a.txt");
        //创建数组
        byte [] bytes=new byte[1024*1024*5];
        //一般数组一次读取的是1024的整数倍,这里面就是5兆的数据
        FileOutputStream fos=new FileOutputStream("b.txt");

        int b;
        while((b=fis.read(bytes))!=-1){
            fos.write(bytes,0,b);
        //一次写入数组大小的数据,从0开始,长度是b个
        }

        fis.close();
        fos.close();

注意:数组一次又一次的读取,里面的字节数据是被覆盖的

二.捕获异常

     FileInputStream fis=null;
        FileOutputStream fos=null;
        //需要初始化

        try {
             fis=new FileInputStream("a.txt");
            //创建数组
            byte [] bytes=new byte[1024*1024*5];
            //一般数组一次读取的是1024的整数倍,这里面就是5兆的数据
             fos=new FileOutputStream("b.txt");
            int b;
            while((b=fis.read(bytes))!=-1){
                fos.write(bytes,0,b);
            //一次写入数组大小的数据,从0开始,长度是b个
            }


        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            //finally永远会运行,除非JVM停止
            try {
                fis.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            try {
                fos.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

三.字符集

在计算的存储中,任意数据都是用二进制的形式存储的(0.1)

一个0或者一个1就叫做一个bit  也叫做比特位

八个bit作为一组 存储256个数据 叫做一个字节

计算机存储英文只需要一个字节

1.GBK

英文存储(单字节)

中文存储(双字节)

规则二的目的就是为了和英文进行区分

只要是以1开头的就是中文

2.Unicode

统一码 可以让世界绝对大多数国家使用 都会兼容ASCII

UTF-8是一种编码方式

3.乱码

原因

1.读取数据未读完整个汉字

2.编码和解码的方式不统一

正确

错误

规避乱码的方式

1.不要用字节流去读取文件

2.编码和解码使用同一个编码方式

四.字符流

字符流的底层就是字节流

字符流=字节流+字符集

特点

输入流:一次读取一个字节,遇到中文时,一次读取多个字节

输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中

使用场景

对纯文本文件进行续写操作

FileReader

1.创建字符输入流的对象

2.读取数据

3.释放资源

无参

    //创建对象,并关联本地文件
        FileReader fr=new FileReader("a.txt");

        //读取数据read()
        //字符流的底层也是字节流,默认也是一个字节一个字节的读取的
        //如果遇到中文就会一次读取多个,GBK一次读两个字节,UTF-8一次读取三个字节
        int ch;
        while((ch=fr.read())!=-1){
            System.out.println((char)ch);
        }

        //释放资源
        fr.close();

有参

 char[] chars=new char[2];
        int len;
        while ((len=fr.read(chars))!=-1){
            //把数组的数据变成字符串打印
            System.out.println(new String(chars,0,len));
        }
        //3.释放资源
        fr.close();

FileWriter

1.创建字符输出流

参数是字符串或者file对象都可以

如果文件不存在就会创建,但是要保证父类文件是存在的

如果文件已经存在,构造方法就会清空文件

2.写入数据

如果write方法参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符

3.释放资源

每次使用完流都要释放资源

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

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

相关文章

pcl的polygonmesh在cloudcompare显示异常

一个polygonMesh文件在PCL显示是这样的: 把它保存成ply,然后用cc打开却是这样的: 这看起来像是某些三角面片没有被保存下来,实际上是因为保存的polygonmesh带有法线信息被pcl区分正反面,这些黑色的小三角它的法线朝向和绿色的不一样. 一个解决办法是清除法线.在cloudcompare选…

AI全栈大模型工程师(二十四)常用的超参

文章目录 七、先介绍几个常用的超参7.1、过拟合与欠拟合7.2、学习率调整策略八、自然语言处理常见的网络结构8.1、文本卷积神经网络 TextCNN8.2、循环神经网络 RNN8.3、Attention (for RNN)后记七、先介绍几个常用的超参 7.1、过拟合与欠拟合 奥卡姆剃刀: 两个处于竞争地位的…

防火墙访问控制、安全审计、网络设备防护检查表

1、访问控制类检查 2、安全审计类检查 3、网络设备防护类检查 原件: 防火墙标准检查表 分类 测评项 预期结果 访问控制 应在网络边界部署访问控制设备,启用访问控制功能 启用了访问控制规则 应能根据会话状态信息为数据流提供明确的允许/拒绝访…

thinkphp连接数据库mysql 报错问题

第一 看报错日志php如果是下面这个报错的话 就是mysql 数据库没有验证连接 ​​​​​​​[2023-12-13T09:57:0108:00][error] [10501]SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client 我们就可以去mysql 的文件检查 验证身份 使…

Nyquist Theorem(取样定理)

取样定理,又称为奈奎斯特定理(Nyquist Theorem),是信号处理领域中一项至关重要的基本原理。它规定了对于连续时间信号,为了能够完全准确地还原出原始信号,即使是在离散时间下进行采样和再构建,都…

十大最好猫主食罐头有哪些品牌?最好猫主食罐头品牌推荐

很多人家里的哈基米是不是吃猫粮吃腻了,或者猫猫平时不喜欢喝水,又或者看猫猫太瘦了想入手几款猫罐头但是又愁于不会选择。而且现在猫罐头风这么大不知道选什么好~ 作为一个经营猫咖5年的老板,大促期间我总能捡漏,屯到一大波好吃…

Appium 自动化测试 —— Appium的环境搭建与设置流程!

1、Appium 环境搭建: 学习 appium 最大的难处之一在于环境的安装,安装流程比较繁琐,安装的工具和步骤也较多,以下是基于 Windows 系统下的 Android 手机端的安装流程。就像我们在用 Selenium 进行 web 自动化测试的时候一样&…

20章节多线程

20.1线程简介 世间有很多工作都是可以同时完成的。例如,人体可以同时进行呼吸、血液循环、思考问题等活用户既可以使用计算机听歌,也可以使用它打印文件。同样,计算机完全可以将多种活动同时进这种思想放在 Java 中被称为并发,而将…

前端八股文

前端八股文 目录 前端八股文1.css选择优先级?2.px与rem区别?3.重绘与重排的区别?4.元素水平垂直居中的方法?5.什么是闭包,闭包有什么特点?6.什么是事件委托?7.什么是原型链?8.new操作…

【Jenkins】Centos环境安装Jenkins(通过rpm安装)

在Centos操作系统中通过rpm安装Jenkins 参考官网 https://www.jenkins.io/doc/book/installing/linux/#red-hat-centos 1、下载安装Jdk17 下载安装 # 更新您的系统,不一定需要 # sudo yum -y update # 安装将用于下载 Java 17 二进制文件的 wget 命令行工具。 s…

C++STL的stack和queue(超详解)

文章目录 前言stack栈的题目最小栈JZ31 栈的压入、弹出序列 stack的模拟实现queue的模拟实现 前言 栈和队列这一块其实有数据结构的基础,学起来非常简单。 stack 栈的成员函数就这么写,除了emplace其他都已经非常熟悉了。 stack没有迭代器吗&#xff…

10个前端开发不容错过的工具网站

作为开发人员,我们经常寻找合适的工具和资源来帮助日常开发工作。但是很多好用的工具网站尤其是国外的网站很多人都错过了。 这里我整理了一份包含 10 个网站的列表,这些网站或许可以帮助到作为前端开发者的你。 1、MDN Web 文档 MDN文档无疑是 Web 开…

【Linux】锁的简单封装以及原理解析

文章目录 一、锁的原理过程1:过程2过程3过程4 二、 锁的简单封装1.LockGuard.hpp2.使用1.正常锁的使用2.使用封装后的 总结 一、锁的原理 为了实现互斥锁操作,大多数体系结构都提供了swap或exchange指令,该指令的作用是把寄存器和内存单元的数据相交换,由于只有一条…

让艺术触手可及!实时云渲染赋能真浪数字艺术馆首展

2023年5月18日,由真浪数字艺术和EZVR联合打造的真浪数字艺术馆首展–「破界交织」让艺术更自由,正式与大家相见。此次展览分为五个主题展馆,汇聚了来自全球各领域的19位青年数字艺术家一同探讨虚实共生、人机共生和万物共生的艺术创作。 真浪…

低代码开发与传统软件开发:未来趋势与竞争格局

近年来,低代码开发平台的快速发展引起了各行各业的广泛关注。低代码开发平台简化了软件开发的复杂性,提供了更快速、更灵活的开发方式。于是,许多人开始产生一个疑问:未来低代码开发是否会取代传统软件开发?今天这篇文…

【网络编程之初出茅庐】

前言:本章主要先讲解一些基本的网络知识,先把基本的知识用起来,后续会更深入的讲解底层原理。 网络编程的概念 网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数…

处理获取当前日期---------------年月日//时分秒

当前时间,先分组匹配,以数组下标索引匹配定义的汉字进行替换 处理日期方法 /* 日期格式化 */ const formatTime function formatTime(time, template) {if (typeof time ! "string") {time new Date().toLocaleString(zh-CN, { hour12: fal…

【学习笔记】Linux(基础知识)

第1章 Linux概况 1.1 Linux起源 四个重要的支柱: ①Unix操作系统; ②Minix操作系统; ③GNU计划; ④Internet网络。 1. Unix操作系统 UNIX的诞生 1971年,用汇编语言首先开发成功16位UNIX系统 1973年,用C语言重写了UNIX系统 创始人:Ken Thompson & Dennis Ritch…

phpstudy搭建WordPress教程

一、phpstudy新建配置WordPress 打开phpstudy,启动Apache(或者Nginx)和MySQL服务 来到数据库部分,点击[创建数据库],填写新建数据库的名称,用户名以及密码,完成后点击确认 来到网站部分&#x…

mysql更新某个字段=这个字段+字符串

当我们像c#中用拼接执行sql语句时,如下: UPDATE abpusers set UserNameqyUserName where UserNameqy-wh 会出现以下错误: 在mysql中通过concat函数来实现 UPDATE abpusers set UserNameCONCAT(qy_,UserName) where UserNameqy-wh