IOl流

什么是IO,什么是输入,输出,什么是读什么是写,参照物,干什么
2.文件类-file
3.掌握使用字节流读写文件
3.1 基础流 FileInputStream & fileOutputStream
3.2 高级流
a.BufferedIputStream & BufferedOutputStream 缓冲区流(快)
b.ObjeckIputStream & ObjectOutoutSteam 对象流(读写对象)
4.掌握字符流读写文本文件
4.1基础流 FileReader &BufferedWrite
4.2高级流
BufferedReader&BufferedWriter
InputStreamReader & OutputStreamWrite

1.什么是IO
I:input 输入
O:output 输出
数据持久化:
(1) 变量:临时存储,存储在内存(只有项目运行起来,开辟一个空间,程序运行结束,内存里的东西全部清空)
int num =10;
ArrayList countrys;
(2)永久性的存储:持久化
a.IO:存储到文件(小,没有规范)
b.数据库:存储到数据库 (大,对数据有要求)

输出流:写,创建新的文件,保存java的信息
输入流:读,将文件的信息读进来,保护会修改文件

2.file 文件类(磁盘 文件夹,文件)
文件类的构造方法
File f= new File(“e”);
1.判断是文件还是文件夹
2.判断文件是否存在
3.新建文件夹
4.获取文件的相关信息
a.文件名 getName()
b.文件的大小
c.文件的最后修改日期
d.文件夹下面的子文件 listFiles
e.文件类型

3.字节流
3.1 基础流 FileInputStream & fileOutputStream
3.2 高级流
a.BufferedIputStream & BufferedOutputStream 缓冲区流
b.ObjeckIputStream & ObjectOutoutSteam 对象流

OutputStream:输出字节流父类(抽象类),写文件(字节–》byte)
*write (int b):向文件中写一个字节:写字节为什么参数不用byte,而用int
*write(byte[]):向文件中写多个字节,整个数组的数据都会写到文件
*write(byte[],int off,int length):向文件中写多个字节,从数组的off位置开始写length个字节。
*flush():刷新此输出流并强制写出所有缓冲的输出字节。
close():关闭io流

FileOutputStream
FileoutputStream(String filePath):包含文件目录和文件
FileoutputStream(File file)
FileoutputStream(String filePath,boolean append)append:true 文件不存在 false
文件存在
FileoutputStream(File file ,boolean append)
\r\n文件中的换行

InputStream:输入流 读文件
int read():从当前的位置开始读取一个字节(Q:字节为啥要用int类型)
byte 的数据范围-123~127 -1:是合法值吗
-1:到达文件末尾(没东西可读)
0~255:读取的数字
返回0到255范围内的int字节值
int read(byte[]b):读取data长度的字节数,并返回读取的长度
int read(byte[]data,int off , int length):读取打他长度的字节数,并返回
void close();关闭io流
真理:write(int b)/int read():IO的次数越多,效率越低,对磁盘的损害越大

3.2高级流
a.BufferedIputStream & BufferedOutputStream 缓冲区流
有一个缓冲区 1024*9:只有当缓冲区满了,才会读写
BufferedInputStream(InputStream):高级流的构造只能放置IO对象
设计模式:装饰模式
案例:做一个大的文件的读写(复制粘贴)

  b.ObjeckIputStream & ObjectOutoutSteam 对象流
  对象流注意点:
  1.对象流能够读写的对象必须实现序列化接口Serializable
  2.对象输入流只能读对象输出流的文件
    ObjectOutputStream
      writeObject(Object obj)
    ObjectInputputStream
      Object readObject()
   序列化:将对象保存文件
   反序列化:

io-2:字符流
字节流 vs 字符流
1.字节流是可以读写任何文件(文本,视频,音频,图片)
基于字节的,所以读写文本文件效率比较低
String–>byte[]
getBytes()
byte[]---->String
new String(byte[])
xxxStream

2.字符流:基于字符(只能处理文本文件):效率高 jdk.12新加的api
中ABC
字节数: 5,unicode:一个字符占2个字节,一个非unicode:占1个长度
字符数: 4 ,不管unicode/非unicode,一个字符占一个长度
unicode: 16位编码的字符(中文,韩文,日文,台湾):一个字节放不下
-77 粘 -79==>长
字符集:
utf-8:包含所有的unicode编码
GBK/gb2312: 简体中文
big5:繁体中文(香港,台湾)
iso-8859-1:西欧编码(浏览器的地址栏)
https://www.baidu.com/s?ie=UTF-8&wd=%E4%B8%AD%E6%96%87
%E4%B8%AD%E6%96%87:中文

Writer:write(char[]) flush() close()
|-FileWriter:基础流
|-BufferedWriter:可以直接对接String
|-OutputStreamWriter:做转换(将字节流转成字符流)

Reader: read() close()
|-File…
|-BufferedReader

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值