IO流、File、文件、缓冲、数据、对象流等流

1.IO流:

流是一个抽象、动态的概念,是一连串连续动态的数据集合。

IO流分类

按流的方向分类:

输入流:数据流向是数据源到程序(以InputStream、Reader结尾的流)

** 输出流**:数据流向是程序到目的地(以OutPutStream、Writer结尾的流)

按处理的数据单元分类

** 字节流**:以字节为单位获取数据,命名上以Stream结尾的流一般是字节流,顶级类InputStream、OutputStream。

字符流:以字符为单位获取数据,命名上以Reader/Writer结尾的流一般是字符流,顶级类Reader、Writer。

按处理对象不同分类:

节点流:可以直接从数据源或目的地读写数据,如FileInputStream、FileReader等。

处理流:不直接连接到数据源或目的地,是”处理流的流”通过对其他流的处理提高程序的性能,如BufferedInputStream、BufferedReader等

字节流

InputStream和OutputStream是Java语言中最基本的两个字节输入输出类。其他所有字节输入输出流类都继承自这两个基类。

这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类.

FilterInputStream和FilterOutputStream是所有包装流的父类

Reader和Writer

Java语言中最基本的两个字符输入输出类。

其他所有字符输入输出流类都继承自这两个基类。

这两个类都是抽象类,不能创建它们的实例,只能使用它们的子类


2.File

创建一个File对象,指向一个文件或者文件夹

File file = new File(“c:/”);

file.getName());//文件或者文件夹的名称

file.length());//长度

​ file.exists());//是否存在

​ file.getPath());//相对路径

​ file.getAbsolutePath());//绝对路径

​ file.isDirectory());//判断file是否指向一个目录

​ file.isFile());//判断file是否指向一个文件

file.list();//获取文件夹里的文件

file.lastModified();获取文件最后修改时间,毫秒数

file.delete();删除

file.mkdir();创建文件夹

//获取文件夹中所有文件目录

String[] list = file.list();

for (String s : list) {

System.out.println(s);

}

//用来遍历

File[] files = file.listFiles();

for (File file1 : files) {

System.out.println(file1.getName()+":"+file1.isDirectory());

}


3.文件流:

字节流:FileInputStream(输入流)FileOutputStream(输出流)

输入流:创建流:InputStream is = new FileInputStream();

读取数据:is.read(); 关闭流:is.close();

注意:(1)每次读取一个字节的数据

(2)读取的数据会以编码值的方式进行展示

(3)当读到末尾后,会返回-1

输入流:要哪输出:is.write

注意:(1)写出一个int值,应该是字符的编码值

(2)当写出的文件不存在时,系统会自动帮忙创建

(3)每一次写出数据会对之前的内容进行覆盖

(4)想要在数据的末尾进行追加,可以在参数后加true

复制文件:注意:

(1)可以一次读取一个byte类型数组

(2)当没有数据是返回-1

(3)读取数组返回的数字是数组有效元素的个数

字符流:FileReader(输入)FileWriter(输出)

读取(输入)字符流:注意:

(1)使用FileReader读取字符数据

(2)读取时保证编码一致,改为UTF-8前面会有一个空格

(3)当没有数据时也会返回-1,读取字符数组时也会返回-1

(4)一次读取一个字符

字符输出流:注意:

(1)可以写出int编码值,字符串,字符数组

(2)字符流的底层依然是字节流

(3)处理纯文本数据使用字符流


4.缓冲流:

BufferedInputStream(输入)BufferedOutputStream(输出)

(1)自带一个缓冲区,用于数据存储

(2)底层是8192个字节byte类型数组,8192还可以通过构造起来修改

(3)读取数据先进入缓冲流

输出流:

(1)写数据时先写到缓冲区

(2)将缓冲区的数据写到磁盘内有三种方法

1.缓冲区已满

2.手动刷出,点.flush()

3.关闭流

BufferedWriter(输入):.readLine()输入一行

底层是一个长度为8192的char类型的数组

BufferdWriter(输出):.newLine()也是一行的意思


5.数据流:

DataInputStream(输入)DataOutputStream(输出):

数据流写出数据会保留数据的类型

只有字节流,没有字符流,都是处理流,不是节点流


6.对象流:

ObjectInputStream(输入)ObjectOutputStream(输出)

(1)属性不想存在磁盘上用transient来修饰

(2)保证读取对象的序列化是一致的,否则就会报错

(3)属性那还可以用static,但是不建议用

(4)使用对象流读写引用类型的数据,需要相应类实现Serializable接口


**序列化:**把对象存到磁盘或者讲对象在网络上进行传输,用write()

反序列化:将此盘中或者网络中的对象,读取出来,用read()

打印流:PrintStram(输入)PrintWriter(输出)

转换流:InputStreamReader(输入)OutputStreamWriter(输出)


7.其他流:

img[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IU72gfHm-1595142758510)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值