什么是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