Java开发重点 IO流

本文深入讲解Java中的IO流概念,包括流的方向、数据单位、功能分类,以及字节流、字符流、节点流和过滤流的特性。详细介绍File类、InputStream、OutputStream、FileInputStream、FileOutputStream、BufferedOutputStream、BufferedInputStream、PrintStream、ObjectOutputStream、ObjectInputStream等核心类的使用方法和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章是我学习IO的时候整理的一些笔记,案例啥的就没有整理了,有兴趣的可以去看看我用IO实现的英汉词典

链接: https://blog.youkuaiyun.com/zxwwantlearnjava/article/details/105648033

在这里插入图片描述

一、流的概念和分类

1.概念

概念: 流就是内存与存储设备之间传输数据的通道、管道

流对象:用来传输数据的对象

2.流的分类:

(1)流的方向(以JVM内存为参照物): 输入流/输出流
输入流:将存储设备中的数据读入到JVM内存中
输出流:将JVM内存中的数据写入到存储设备中

(2)数据单位:字节流/字符流

字节流:以字节为单位 处理任意类型的文件
字符流:以字符为单位 处理文本类型的文件

注意:文本类型的文件:能以记事本打开而且不乱码的文件

例如: .txt /.html /.java /.xml /.c是文本文件
.class /.world /.ppt /.map4是非文本文件

(3)流的功能:节点流/过滤流

节点流:只具有基本的读写功能
过滤流:为节点流增强功能

3.字节输入/输出流(抽象、父类)

(1)InputStream(字节输入流)
(2)OutputStream(字节输出流)

4.文件字节输入/输出流(子类)

(1)FileInputStream(文件字节输入流)
常用构造方法:

FileInputStream fis = new FileInputStream(“E:/text/a.txt”);

和下面的区别就是 文件必须存在 否则报错 java.io.FileNotFoundException

(2)FileOutputStream(文件字节输出流)
常用构造方法:

(1)FileOutputStream fos = new FileOutputStream(“E:/text/a.txt”);
a.参数代表: 文件的路径及文件名: 例如:E:/text/a.txt或是E:\text\a.txt
如果指定文件不存在,则JVM会自动创建文件,但是如果指定文件夹不存在,
则jvm报错,错误信息为: java.io.FileNotFoundException(系统找不到指定路径)
b.绝对路径: 带有盘符的路径.
盘符:/文件夹/文件

(2)FileOutputStream fos = new FileOutputStream(“a.txt”);
默认在当前项目的根目录下查找所需要的文件,如果有,直接使用,如果没有,JVM自动创建

(3)FileOutputStream fos = new FileOutputStream(“file/a.txt”);
开发时,通常在项目的根目录下创建一个文件夹,用于存储项目中操作的文件,便于管理

(4)FileOutputStream fos = new FileOutputStream(“file/a.txt,true”);
参数说明:
第一个参数: 指定操作的文件路径及文件名
第二个参数: boolean 是否在原有内容进行追加

5.字节过滤流
(1)BufferedOutputStream/BufferedInputStream

a.缓冲流,提高IO读写效率,减少访问磁盘次数
b.数据存储在缓冲区,可以通过flush方法或是close方法
将缓冲区内容一次性写入到文件中,并清空缓冲区
1.flush方法只是清空缓冲区同时将缓冲区的内容一次性
写入到文件中,但是流还是可以继续使用
2.close方法关闭流的同时清空缓冲区,将缓冲区的内容
一次性写入到文件中,流一旦关闭不能再继续使用
注意: 缓冲区满时,将缓冲区的内容一次性写入到文件中,同时清空缓冲区

(2)PrintStream(输出流)

a.缓冲流,提高IO写的效率 b.增强了操作基本数据类型的方法,同时还可以操作字符串
print(int n)/print(long l)/print(boolean b)/print(double /d)/print(String str)–>不自动换行
println(int n)/println(long l)/println(boolean b)/println(double /d)/println(String str)–>自动换行

(3)ObjectOutputStream/ObjectInputStream(重点:对象序列化):

a.增强缓冲区,提高IO读写效率 b.增强了8种基本数据类型方法 c.对象序列化:
①概念:对象放在流上进行传输的过程
②参与对象序列化的要求:参与对象序列化的对象对应的类型必须实现java.io.Serializable
③对象的读写操作:
void writeObject(Object obj):将指定的对象写入到文件
Object readObject();从文件中读取对象
④文件达到尾部的标记:java.io.EOFException
⑤如果对象的某一个属性不想参与对象序列化,则对象前面用transient修饰
⑥如果参与对象序列化的对象中有自定义类型的属性,该属性也必须实现java.io.Serializable
否则运行报错:java.io.NotSerializableException(不可序列化异常)

write(‘A’); 可以传入一个字节大小的字符

 // JDK7.0的语法: try- with - resources   
 try(定义资源  实现了Autocloseable接口){ 
     //  代码  
 }catch(Exception e){
    e.printStackTrack();  
 }
6.File类

java.io.File
File对象代表磁盘上的一个文件或目录
creatNewFile();创建新文件
mkdir(): 创建新目录
delete(): 删除文件/文件夹
注意: 如果删除文件夹,则该文件夹必须为空,否则删除失败
如果删除文件,不管有没有数据,都会删除成功

常用方法
exists(): 文件对象所代表的文件(或目录)是否存在
getName(): 获取文件名,带有后缀(文件类型,扩展名)
isDirectory(): 判断文件对象所代表的是否是目录
isFile(): 判断文件对象所代表的是否是文件
getAbsolutePath(): 获取绝对路径
listFiles(): 列出一个目录下的所有文件和子目录
listFiles(FileFilter f): 文件过滤器 实现FileFilter接口

数据过滤流
DataInputStream/DataOutputStream
直接读取8种基本数据类型和String readUTF()/writeUTF();

PipedInputStream/PipedOutputStream 管道流 用来在线程间交换数据
RandomAccessFile: 随机访问文件

字符的编解码
当字符编码和字符的接码不一致时,就会出现乱码

7.Reader/Writer 字符流的父类

FileReader/FileWriter 文件字符流 节点流
BufferedReader/BufferedWriter 缓冲流 过滤流
PrintWriter作用和BufferedWriter一样 但是更方便

桥转换流: InputStreamReader / OutputStreamWriter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值