IO流

I/O流

什么是流?

概念:内存与存储设备之间传输数据的通道

水借助管道传输;数据借助流传输

流的分类

按方向分:

  • 输入流:将<存储设备>中的内容读到<存储设备>中
  • 输出流:将<内存>中的内容写入到<存储设备>中

按单位分:

  • 字节流:以字节为单位,可以读写所有数据
  • 字符流:以字符为单位,只能读写文本数据

按功能分:

  • 节点流:具有实际传输数据的读写功能
  • 过滤流:在节点流之上增强功能

文件字节流

  • FileInputStream:

    public int read(byte[] b )
    从流中读取多个字节,将读到内容存入b数组,返回实际读到的字节数;如果达到文件的尾部,则返回-1
    
  • FileOutputStream:

    public void write(byte[] b)
    一次写入多个字节,将b数组中所有字节,写入输出流。
    

字节缓冲流

  • BufferedInputStream
  • BufferedOutputStream
1、提高IO效率,减少访问磁盘的次数
2、数据存储在缓冲区中,flush是将缓冲区的内容写入文件中,也可以直接close

对象流

1、增强了缓冲区的功能
2、增强了读写8种基本数据类型和字符串功能
3、增强了读写对象得到功能:readObject() 				从流中读取一个对象
					   writeObject(Object obj)	 向流中写入一个对象
使用流传输对象的过程称为序列化、反序列化。

注意事项:

1、序列化类必须要实现Serializable接口

2、一个对象只能读一次,重复读一个对象会抛出EOFException异常

3、序列化类中对象属性也要实现Serializable接口

4、序列化版本号ID,保证序列化的类和反序列化的类是同一个类。

5、使用transient<瞬间的>修饰属性,这个属性不会被序列化

6、静态属性也不能被序列化

7、序列化多个对象可以借助集合实现

字符编码

  • ISO-8859-1 收录了除ASCLL外,还包括西欧、希腊语、泰语、阿拉伯语、希伯来语对应的文字
  • UTF-8: 针对Unicode码表的可变长度字符编码
  • GB2312 简体中文
  • GBK 简体中文,扩充
  • BIG5 台湾,繁体中文

编码方式和解码方式不同会出现乱码

字节流可以复制任何文件,但是字符流只能复制文本文件,不能复制图片和二进制文件。

转化流

桥转换流:InputStreamReader / OutputStreamWrite

  • 可将字节流转换为字符流
  • 可设置字符的编码方式
InputStreamReader是字节流通向字符流的桥梁
OutputStreamReader是字符流通向字节流的桥梁

File类

  1. 概念:代表物理盘符中的一个文件或者文件夹
  2. 方法:
1、CreatNewFile()	//创建一个新文件夹
2、mkdir()			//创建一个新目录
3、delete()			//删除文件或空目录
4、exists()			//判断file对象所代表的对象是否存在
5、getAbsolutePath()	//获取文件的绝对路径
6、getName()			//取的名字
7、getParent()		//获取文件所在的目录
8、isDirectory()		//是否是目录
9、isFile()			//是否是文件
10、lenght()			//获得文件的长度
11、listFiles()		//列出目录中的所有内容
12、renameTo()		//修改文件名为
文件夹删除操作只能删除最低级的空目录
posted @ 2021-11-30 17:39  戒爱学Java  阅读(28)  评论(0编辑  收藏  举报