Java IO流 详解(字节流、字符流、输入流、输出流、刷新)

一、IO流概述

          I:Input输入  从其他存储设备【读】数据到内存中  输入过程
        O:OutPut输出  从内存中【写】数据到其他存储设备  输出过程

二、IO流分类

        1.根据数据的类型分为:

                【字节流】和【字符流】

                【字节流】:以字节为基本单位,读写数据的流
                            字节输入流:以字节为基本单位,读数据
                            字节输出流:以字节为基本单位,写出数据
                【字符流】:以字符为基本单位,读写数据的流
                            字符输入流:以字符为基本单位,读数据
                            字符输出流:以字符为基本单位,写出数据

        2.根据数据的流向分为:

                【输入流】和【输出流】

                【输入流】:把数据从 其他存储设备 上【读取】到 内存 中的流
                           字节输入流:以字节为基本单位,读数据
                           字符输入流:以字符为基本单位,读数据
                【输出流】:把数据从 内存 中【写出】到 其他 存储 设备中的流
                           字节输出流:以字节为基本单位,写出数据
                           字符输出流:以字符为基本单位,写出数据

        3.IO流的顶层父类

                - 字节输入流:顶层父类:InputStream --> 抽象类   常见子类:FileInputStream
                - 字节输出流:顶层父类:OutputStream --> 抽象类   常见子类:FileOutputStream
                - 字符输入流:顶层父类:Reader --> 抽象类   常见子类:FileReader
                - 字符输出流:顶层父类:Writer --> 抽象类   常见子类:FileWriter

 

三、字节输出流OutPutStream

        OutputStream 输出流顶层父类
            java.io.OutputStream抽象类是所有【字节输出流】的父类,用来【写】出字节输出流


            成员方法:

                - public void close():关闭次输出流并释放与此流相关联的任何系统资源
                - close方法,当完成流的操作时,必须调用此方法,释放系统资源,否则数据写入不完整或消失
                - public abstract void write(int b):将指定的字节写入输出流【一个字节一个字节写入到硬盘】
                - public void write(byte b[]):将 b.length字节从指定的字节数组写入到此输出流【以字节数组的形式写入到硬盘】
                - public void write(byte b[],int off, int len):将指定范围的字节数组的字节数据写到此输出流中【将字节数组中某一段字节数据写到硬盘】

           方法逐个演示:

                1.写出单个字节数据

        // 1.创建字节输出流对象  路径文件必须真实存在FileOutputStream fos1 = new FileOutputStream("day12_File类与递归&IO流&字符流&字节流\\resources\\a.txt");// 2.写出 单个字节的数据fos1.write(72);// 写入的一个字节数据,我们是往文本文档写入字节数据,但是因为是文本类型,需要将字节数据转换成文本数据,文本就是字符fos1.write(105);fos1.write(33);// 3.关闭流,释放资源fos1.close();

        (运行结束,会在对应的文件中生成对应的字节,代码中写入的数字为ASCII码,每个数字对应一个字母)

                 2.写出字节数组数据

        //1.创建字节输出流对象       真实存在的路径FileOutputStream fos1 = new FileOutputStream("day12_File类与递归&IO流&字符流&字节流\\resources\\a.txt");// 2.创建字节数组byte[] bytes = {97,98,99};// 3.写出字节数组中的字节数据fos1.write(bytes);// 4.关闭流,释放资源fos1.close();

 (运行结束,会在对应的文件中生成对应的字节,代码中写入的数字为ASCII码,每个数字对应一个字母)

                3.写出指定范围字节数组的数据

        // 1.创建字节输出流对象          真实存在的路径FileOutputStream fos1 = new FileOutputStream("day12_File类与递归&IO流&字符流&字节流\\resources\\a.txt");// 2.创建字节数组byte[] bytes = {97,98,99};// 3.写出字节数组中的字节数据fos1.write(bytes,1,2);// 4.关闭流,释放资源fos1.close();

 (运行结束,会在对应的文件中生成对应的字节,代码中写入的数字为ASCII码,每个数字对应一个字母)

                4.数组追加续写

        // 1.创建字节输出流对象            真实存在的路径FileOutputStream fos1 = new FileOutputStream("day12_File类与递归&IO流&字符流&字节流\\resources\\a.txt",true);// 2.创建字节数组byte[] bytes = {97,98,99,100};// 3.写出字节数组中的字节数据fos1.write(bytes,1,2);// 4.关闭流,释放资源fos1.close();

               

(这里续写是沿着第三个练习续写的,第三个练习写了 “bc”,这里也续写一个“bc”,不续写的话,同一个文件的数据会被覆盖)

        5.写出换行

        /**   需求: 写一首诗* 鹅鹅鹅,* 曲项向天歌。* 白毛浮绿水,* 红掌拨清波。* */// 1.创建字节输出流对象,关联到 day12\resources\a.txt   真实存在FileOutputStream fos1 = new FileOutputStream("day12_File类与递归&IO流&字符流&字节流\\resources\\a.txt");// 2.创建字节数组byte[] bytes = {97,98,99,100};// 3.写出字节数组中的字节数据fos1.write("鹅鹅鹅,".getBytes());fos1.write("\r\n".getBytes());fos1.write("曲项向天歌。".getBytes());fos1.write("\r\n".getBytes());fos1.write("白毛浮绿水,".getBytes());fos1.write("\r\n".getBytes());fos1.write("红掌拨清波。".getBytes());// 4.关闭流,释放资源fos1.close();

四、字节输入流InputStream

        java.io.InputStream 抽象类,给类是所有字节输入流的父类,用于读取字节数据

        构造方法:

                概述:java.io.FileInputStream类是InputStream的实现子类,表示字节输入流,用于读取数据

                - public FileInputStream(String name):通过打开与实际文件的连接来创建一个字节输入流对象,该文件由文件系统的路径名 name命名
                - public FileInputStream(File file):通过打开与实际文件的连接来创建一个字节输入流对象,该文件由文件系统中的文件对象file命名

        成员方法:

                - public void close():关闭输入流并释放与此流相关的任何系统资源
                - public abstract int read():从输入流读取数据的下一个字节,每次读取一个字节
                - public int read(byte b[]):从输入流读取一些字节数据,并将它们存储到字节数住b中

        方法逐一演示:

                1.构造方法

        // 创建字节输入流对象,关联数据源文件路径      真实存在的路径FileInputStream fileInputStream1 = new FileInputStream("day12_File类与递归&IO流&字符流&字节流\\resources\\a.txt");FileInputStream fileInputStream2 = new FileInputStream(new File("day12_File类与递归&IO流&字符流&字节流\\resources\\a.txt"));// 创建字节输入流对象,关联数据源文件路径      不存在的路径,会报异常:系统找不到指定的文件FileInputStream fileInputStream3 = new FileInputStream("day12_File类与递归&IO流&字符流&字节流\\resources\\a1.txt");

                2.读取单个字节数据

        // 创建字节输入流对象,关联数据源文件路径      真实存在的FileInputStream fileInputStream1 = new FileInputStream("day12_File类与递归&IO流&字符流&字节流\\resources\\a.txt");// 定义一个Int类型的变量,用来存储读取到的数据int len;// 使用循环的方式读取数据while ((len = fileInputStream1.read()) != -1){// while循环中的条件,fis每读取一个字节,会优先复制给len变量,然后拿len变量与 -1 进行比较System.out.print((char) len);}// 关闭流fileInputStream1.close();

        

        (输出语句中如果不加  char  强转字符的话,打印出来的就是ASCII码,需要强转成字符类型)

                3.读取字节数组长度的字节数据

    public static void main (String[] args) throws IOException {// 创建字节输入流对象,关联数据源文件路径      真实存在的FileInputStream fileInputStream1 = new FileInputStream("day12_File类与递归&IO流&字符流&字节流\\resources\\a.txt");// 创建byte[] 数组,长度暂定为2,用来存储读取到的字节数据byte[] bytes = new byte[8192];// 定义一个int类型的变量,用来存储读取到的字节个数int len;//while循环的方式来遍历读取本中的数据while ((len = fileInputStream1.read(bytes)) != -1){System.out.println(new String(bytes,0,len));}// 关闭流fileInputStream1.close();/**   使用数组读取的话,每次读取多个字节,减少系统之间的IO操作次数,从而提高了读写的效率,建议开发中如此使用* */}

        

                (因为数组不能强转,所以用来String的一个方法用来打印数组)
   

五、字节流操作文本文件可能存在的问题

          1.当使用字节流读取文本文档的时候,可能会有一些问题,遇到中文字符的时候,可能不会显示完整的字符
          2.因为一个中文符可能占用多个字节存储,所以Java提供了字符流类,专门来操作文本文件,以字符为单位读写数据

六、字符输入流Reader

        java.io.Reader类:抽象类,表示用于读取字符流的所有类的超类,可以读取字符信息到内存中

        构造方法:

                概述:java.io.FileReade类,继承Reader类,表示字符输入流,用来读取字符数据对象

                 - public FileReader(String fileName):FileReader类对象,给定要读取的文件的名称
                 - public FileReader(File file):FileReader类对象,给定要读取的file文件的名称

        成员方法:

                - public abstract void close():关闭此流并释放与此流相关的任何系统资源
                - public int read():从输入流读取一个字符,读取到末尾返回 -1
                - public int read(char cbuf[]):从输入流中读取一些数据,并将它们存储到字符数组cbuf中

         方法逐一演示:

                (字符的输入输出流   和   字节的输入输出流   一样的效果,有些地方就不加以赘述了)

                1.构造方法

        // 文件真实存在FileReader fr1 = new FileReader("day12_File类与递归&IO流&字符流&字节流\\resources\\a.txt");// 文件不存在,会报出异常FileReader fr2 = new FileReader("day12_File类与递归&IO流&字符流&字节流\\resources\\a.txt");

                2.读取单个字符数据

        // 创建字符输入流对象FileReader fr1 = new FileReader("day12_File类与递归&IO流&字符流&字节流\\resources\\a.txt");int len;// 循环读取while ((len = fr1.read()) != -1){System.out.print((char) len);}//关闭fr1.close();

               3.读取字符的数组长度的字符数据

        // 创建字符输入流对象FileReader fr1 = new FileReader("day12_File类与递归&IO流&字符流和字节流\\resources\\a.txt");int len;// 每次读取返回的字符数据char[] chars = new char[1024];// 循环读取while( (len = fr1.read(chars)) != -1 ){System.out.print(new String(chars,0,len));}// 关闭流fr1.close();

        

七、字符输出流Write

         java.io.Writer类,抽象类,用于表示字符输出流的所有类的超类,将指定的字符信息写出到目的地

        构造方法:

                概述:java.io.FileWriter类 是Writer的子类,表示字符输出流,可以用来写出字符数据

                - public FileWriter(String fileName)
                - public FileWriter(String fileName, boolean append)
                - public FileWriter(File file)
                - public FileWriter(File file, boolean append)

                注意:

                1.当你创建一个字符输出流对象时,必须传入一个文件路径
                2.前面2个构造方法,传入的路径,如果没有这个文件,会创建这个文件,如果文件里面有数据,数据会被清空
                3.后面2个构造方法,多了一个append的参数,true表示不清空,false默认清空

        成员方法:

                - public void write(int c)
                - public void write(char cbuf[])
                - public abstract void write(char cbuf[], int off, int len)
                - public void write(String str)
                - public void write(String str, int off, int len)
                - public abstract void flush()
                - public abstract void close()

        方法逐个演示:

                1.构造方法

FileWriter fw1 = new FileWriter("day12_File类与递归&IO流&字符流和字节流\\resources\\a.txt");
FileWriter fw2 = new FileWriter(new File("day12_File类与递归&IO流&字符流和字节流\\resources\\a.txt"));FileWriter fw3 = new FileWriter("day12_File类与递归&IO流&字符流和字节流\\resources\\a.txt",true);
FileWriter fw4 = new FileWriter(new File("day12_File类与递归&IO流&字符流和字节流\\resources\\a.txt"),true);

               2.写出单个字符

        // 第一步:创建字符输出流对象。关联目的地文件路径FileWriter fw1 = new FileWriter(new File("day12_File类与递归&IO流&字符流&字节流\\resources\\b.txt"));// 第二步:写入单个字符fw1.write(97);// 第三步:关闭流fw1.close();

               

                3.写出字符串

        // 第一步:创建字符输出流对象。关联目的地文件路径FileWriter fw1 = new FileWriter("day12_File类与递归&IO流&字符流和字节流\\resources\\c.txt");// 第二步:写出字符串String str = "我今天心情真美丽\r\n嘿嘿哈哈";fw1.write(str,3,5);// 第三步:关闭流fw1.close();

         

                4.写出字符数组

        // 第一步:创建字符输出流对象。关联目的地文件路径FileWriter fw1 = new FileWriter("day12_File类与递归&IO流&字符流&字节流\\resources\\c.txt");// 第二步:写出字符数组char[] chars = {'我','是','一','个','伟','大','的','人'};fw1.write(chars);// 第三步:关闭流fw1.close();

         

 

八、流的关闭和刷新

        - public abstract void flush():刷新缓冲区,流对象可以继续使用
        - public abstract void close():关闭流,释放系统资源,关闭流会顺带刷新缓冲区,关闭之后不可操作

        // 第一步:创建字符输出流对象。关联目的地文件路径FileWriter fw1 = new FileWriter("day12_File类与递归&IO流&字符流&字节流\\resources\\d.txt");// 第二步:写出字符串String str = "我今天心情真美丽";fw1.write(str);fw1.write("\r\n");fw1.write("这是第二行");fw1.flush();fw1.write("\r\n");fw1.write("这是flush之后的数据");//第三步:关闭流fw1.close();

        

 

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

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

相关文章

java 字节流与字符流的区别

字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢? 实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区&am…

Java IO 字节流、字符流详解

1. 字节流与字符流 流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向…

【Java基础-3】吃透Java IO:字节流、字符流、缓冲流

Java IO流 前言1 初识Java IO1.1 IO流分类1.2 案例实操 2 IO流对象2.1 File类2.2 字节流2.3 字符流2.4 序列化 3 IO流方法3.1 字节流方法3.2 字符流方法 4 附加内容4.1 位、字节、字符4.2 IO流效率对比4.3 NIO 前言 有人曾问fastjson的作者(阿里技术专家高铁&#x…

字节流和字符流详解

1.流的概念 在编程中是一种抽象的概念,就好比“水流”,从一段流向另一端在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用…

Java IO流 - 字节流的使用详细介绍

文章目录 IO流的基本介绍字节流的使用文件字节输入流创建字节输入流每次读取一个字节每次读取一个数组一次读取全部字节 文件字节输出流创建字节输出流写入文件输出流 文件拷贝练习 IO流的基本介绍 IO流的概述: I 表示intput,是数据从硬盘文件读入到内存的过程&…

字节流(IO流)概述、字节流(写入/输出)数据(3种)和换行、追加写入、异常处理办法、字节缓冲流、字节流复制图片视频案例

目录 IO流概述和分类字节流写入数据(OutputStream)FileOutputStream字节流写数据的3种方式 字节流写入数据的两个小问题字节流写数据如何换行字节流如何实现追加写入 字节流写入数据加入异常处理字节流读取数据(InputStream)FileI…

字节流

字节流 根据数据的流向分为:输入流和输出流。 输入流 :把数据从其他设备上读取到内存中的流。输出流 :把数据从内存 中写出到其他设备上的流。 格局数据的类型分为:字节流和字符流。字节流 :以字节为单位&#xff0c…

1、字节流详解

文章目录 一、字节流1、字节输出流:OutputStream2、字节输入流:InputStream3、使用字节流复制数据4、字节缓冲流 一、字节流 文件字节流 字节流的两个抽象父类:字节输出流:OutputStream和字节输入流:InputStream 1、字…

PS美工教程:制作真实水面倒影效果详细步骤

倒影效果是电商海报和广告类海报常用的表现手法,倒影可以填充画面的空白区域和营造真实的视觉感受,给受众带来更好的视觉体验。 在海报合成中倒影效果可谓是必不可少的存在,那今天潇洒模具学院的老师就教大家通过PS自带的功能打造出真实的环…

CSS图片倒影效果

先看一下效果图 废话不多说直接上代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style lang"scss">img {-webkit-box-reflect: below 0px -webkit-linear-gradient(bottom, rgba(25…

3、水面倒影效果

水面倒影效果 概要 我们会使用 Matplotlib 的 pyplot 模块创建图并显示图像&#xff1a; 用以下魔术命令&#xff0c;以便将图像显示在笔记本中而不是在新的显示窗口中&#xff1a; 如果要显示彩色图像&#xff0c;可以使用以下命令将图像从 BGR 转换为 RGB。 最后使用 plt…

CSS3实现倒影效果

css的功能很强大&#xff0c;可以实现很多效果。比如图像的倒影和文字的倒影等&#xff0c;利用的是box-reflect&#xff0c;因为浏览器兼容问题&#xff0c;目前主要采用-webkit-box-reflect来实现&#xff08;谷歌浏览器&#xff09;。 倒影的属性&#xff1a; box-reflect&…

HTML里面设置文本倒影,文字倒影怎么做

现在的文字如果仅仅是在一个平面上,不加任何效果,那就真的是太死板、太单调了,尤其追求艺术的小伙伴们啊,细心的话你就会发现那些神马广告之类的文字都讲究有个性,让人过目不忘的效果,有木有!那么接下来就教大家制作文字效果,就是文字倒影效果制作。广告时间: 人物素描…

倒影(reflections)效果的实现

1、简介 当站在湖畔岸边或者镜子面前的时候&#xff0c;都可以看到倒着的自己&#xff0c;那种效果就叫倒影&#xff0c;或者叫镜面反射。在SPE中也支持这种效果&#xff0c;实现的基本思路是把物体根据反射平面镜像之后再绘制一遍&#xff0c;绘制镜像时有几个问题需要注意&a…

渐变加蒙版做倒影

平面设计是PHOTOSHOP应用最为广泛的领域&#xff0c;无论是我们正在阅读的图书封面&#xff0c;还是大街上看到的招帖、海报&#xff0c;这些具有丰富图像的平面印刷品&#xff0c;基本上都需要PHOTOSHOP软件对图像进行处理。用Photoshop 为图片添加倒影&#xff0c;这个效果不…

联想IBM ThinkPad X201i 笔记本显示屏上方中间的键盘灯不亮解决办法

这款小黑&#xff0c;不记得13年还是14年买的&#xff0c;当年就要7千大洋&#xff0c;那时候觉得很贵咬牙买了下来&#xff0c;今天回头看来贵有贵的道理。因为现在用起来还是很爽&#xff0c;去年安装Win10&#xff0c;然后在上面开发JavaEE项目&#xff0c;很快、畅顺。最近…

ibm 服务器 总显示f1,联想ThinkPad笔记本中F1/F4键盘指示灯一直常亮着如何解决

有不少使用联想ThinkPad笔记本的小伙伴们在使用电脑的时候&#xff0c;发现遇到这样一个情况&#xff0c;就是键盘上的F1/F4键盘状态指示灯常亮&#xff0c;按FNESC组合键也无法取消&#xff0c;按FN和对应的功能键也不行&#xff0c;这可该怎么解决呢&#xff0c;一般是由于热…

联想拯救者 Lenovo Legion 通电自启 插电自启 通电开机 插电开机 Wake on AC

联想拯救者 Lenovo Legion 通电自启 插电自启 通电开机 插电开机 Wake on AC 文章目录 联想拯救者 Lenovo Legion 通电自启 插电自启 通电开机 插电开机 Wake on AC说明一、我的电脑二、详细过程1.BIOS选项2.查阅改BIOS的资料3.修改BIOS失败4.换个思路&#xff1a;不修改BIOS?…

联想键盘sk8821的Fn功能键

1. 联想键盘sk8821的Fn功能键 1.1. 恢复 F1-F12实际功能 F1-F12系统下会默认为快捷键&#xff08;功能键&#xff09;&#xff0c;而非F1-F12实际功能。可能会导致您在使用习惯上的不适应。 键盘驱动安装目录&#xff1a;X:\LX_KEY\Yangtian\Low Profile Keyboard\setup.exe …

如何关闭联想台式机电脑USB键盘的FN功能

如何关闭联想台式机电脑USB键盘的FN功能 现在很多单位配备的联想台式机所配的USB键盘&#xff0c;F1-F12系统下会默认为快捷键&#xff08;功能键&#xff09;&#xff0c;而非F1-F12实际功能。可能会导致您在使用习惯上的不适应。 通过查询联想官网有如下解决方案&#xff0c;…