Java初学笔记24-【文件、文件操作、I/O流、InputStream、FileOutputStream、FilelnputStream 、FileReader、FileWriter、节点流字符流】


在这里插入图片描述

一、文件与文件流

1. 文件

文件:保存数据的地方。
比如经常使用的word文档,txt文件,excel文件…都是文件。它既可以保存一张图片,也可以保持视频声音.…

2. 文件流

在这里插入图片描述

(1)文件在程序中是以流的形式来操作的
(2)流:数据在数据源(文件)和程序(内存)之间经历的路径
(3)输入流:数据从数据源(文件)到程序(内存)的路径(4)输出流:数据从程序(内存)到数据源(文件)的路径
(5)输入输出是相对程序而言的

二、文件操作

1. 创建文件对象的相关构造器和方法

(1)构造器

【1】根据路径构建一个File对象
new File(String pathname)

在这里插入图片描述

【2】根据父目录文件+子路径构建
new File(File parent,String child)

在这里插入图片描述

【3】根据父目录路径+子路径构建
new File(String parent,String child)

在这里插入图片描述

(2)方法

【1】创建新文件
createNewFile 

2. 文件的相关方法(获取文件相关的信息)

(1)getName() 获取文件名字

(2)getAbsolutePath() 文件绝对路径

(3)getParent() 文件父级目录

(4)length() 文件大小(字节)

(5)exists() 文件或目录是否存在

(6)isFile() 是不是一个文件

(7)isDirectory() 是不是一个目录

(8)mkdir 创建一级目录

(9)mkdirs 创建多级目录

(10)delete 删除空的目录或文件

三、Java I/O流的原理与分类

1. Java IO流的原理

(1)I/O是Input/Output的缩写,I/O技术是非常实用的技术,用于处理数据传输。如读/写文件,网络通讯等。
(2)Java程序中,对于数据的输入/输出操作以”流(stream)”的方式进行。
(3)java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过方法输入或输出数据。

2. Java IO流的分类

(1)按操作数据单位分为:字节流(8bit),字符流(按字符)。
【1】操作声音、视频、word,PDF文件,用字节流,可以保证无损,但是效率相比字符流低。
【2】操作文本文件,用字符流,效率高。
【3】字节输入流lnputStream,字节输出流OutputStream,字符输入流Reader,字符输出流Writer都是抽象父类
在这里插入图片描述

(2)按数据流的流向分为:输入流,输出流
(3)按流的角色分为:节点流,处理流(包装流)

四、InputStream 字节输入流

1. 介绍

(1)InputStream抽象类是所有类字节输入流的超类

2. 常用的子类

在这里插入图片描述

(1)FilelnputStream:文件输入流
(2)BufferedlnputStream:缓冲字节输入流
(3)ObjectInputStream:对象字节输入流

五、FilelnputStream 文件字节输入流

1. 介绍

在这里插入图片描述
在这里插入图片描述

(1)使用read() 方法,从该输入流读取一个字节的数据。 读取的数据返回的是int类型,直到最后读完了返回-1。故需要用while循环配合read() 进行读取。而在程序中显示时,需要类型装换为char
(2)文件读取完毕之后,需要关闭该流,释放该流,避免造成资源的浪费。
(3)因为InputStream是字节流,每次读取8个bite,即1个字节,字母是1个字节,汉字是3个字节,故用read() 方法读取汉字会出来乱码。
(4)为了提高效率,使用 read(byte[] b)
从该输入流读取最多 b.length个字节的数据为字节数组。

2. 示例代码

(1)使用read()方法
在这里插入图片描述

(2)使用read(byte[])方法
在这里插入图片描述

六、FileOutputStream 文件字节输出流

1. 介绍

在这里插入图片描述
在这里插入图片描述

2. 示例代码

在这里插入图片描述

3. 文件拷贝

原理:将文件1拷贝到文件2处,中间通过java程序作为中转,而且是利用循环,读取一部分数据后就将这部分数据写入到指定文件中,即边读边写。

注意:写文件时,一定使用write(byte[] b, int off, int len) 方法,避免文件造成损坏/损失

在这里插入图片描述
在这里插入图片描述

七、FileReader文件字符输入流 和 FileWriter文件字符输出流

【FileReader类图】
在这里插入图片描述

【FileWriter类图】
在这里插入图片描述

1. FileReader介绍

(1)FileReader 和 FileWriter是字符流,即按照字符来操作io

(2)FileReader相关方法:

【1】new FileReader(File/String)
【2】read():每次读取单个字符,返回该字符,如果到文件未尾返回-1
【3】read(char[ ]):批量读取多个字符到数组,返回读取到的字符数,如果到文件末尾返回-1

(3)用到的相关API:

【1】new String(char[]): 将char[]转换成String
【2】new String(char[ ],off,len):将char[的指定部分转换成String

2. FileReader代码示例

(1)FileReader与read( )
在这里插入图片描述

(2)FileReader与read(char [ ] )
在这里插入图片描述

3. FileWriter介绍

(1)FileWriter相关方法:

【1】new FileWriter(File/String):盖模式,相当于流的指针在首端
【2】new FileWriter(File/String,true):追加模式,相当于流的指针在尾端
【3】write(int):写入单个字符
【4】write(char):写入指定数组
【5】write(char[ ] ,off,len):写入指定数组的指定部
【6】write (string):写入整个字符串
【7】write(string,off,len):写入字符串的指定部分

(2)相关APl:

【1】String类:toCharArray:将String转换成char[ ]
【2】注意:FileWriter使用后,必须要关闭(close)或刷新(flush),否则写入不到指定的文件!

4. FileWriter代码示例

在这里插入图片描述

八、节点流和处理流

1. 介绍

在这里插入图片描述

(1)数据源:存放数据的地方,例如文件、数组、管道、字符串等
(2)节点流:可以从一个特定的地方读写数据,使用如FileReader、FileWriter
(3)处理流:是"连接"在已存在的流(节点流或处理流)之上,为程序提供更为强大的读写功能,使用如BufferedReader、BufferedWriter
(4)处理流也叫包装流,即对节点流进行包装,使功能更加强大
(5)在BufferedWriter中有一个Writer属性,该属性就可以接收继承了Writer类的子类,如FileWriter、FileOutputStream、StringWriter等等。所以不用考虑对于不同的数据源要选择什么类来操作,实现了包装的效果,增加了灵活性,故叫做包装流。
在这里插入图片描述

2. 区别与练习

(1)节点流是底层流/低级流,直接跟数据源相接。
(2)处理流是包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。
(3)处理流(也叫包装流)对节点流进行包装,使用了修饰器设计模式,不会直接与数据源相连

3. 处理流的功能:

(1)性能的提高:主要以增加缓冲的方式来提高输入输出的效率。
(2)操作的便捷:处理流可能提供了一系列便捷的方法来一次输入输出大批量的数据, 使用更加灵活方便

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃凉拌辣芒果

不断学习,不断进步,共勉~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值