IO流总述

IO流分类

1)按照流向分类:
输入流:读取数据用的
输出流:写数据用的

2)按照读写的数据分类(体系结构)
<1>字节流[读写任何类型的文件(任何文件底层都是字节数据)]
字节输入流:IntputStream(抽象类)
–FileInuptStream: 读取文件中的字节
–BufferedInputStream: 对InputStream进行包装,提高读取数据的效率
字节输出流: OutputStream(抽象类)
–FileOutputSteam: 往文件中写字节
–BufferedOutputStream: 对OutputStream进行包装,提高写入数据的效率

1)普通字节流复制
			//创建流对象
			FileInputStream fis = new FileInputStream("文件路径");
			FileOutputStream fos = new FileOutputStream("文件路径");
			
			//一次读写多个字节
			byte[] bs = new byte[1024]; //1024byte=1kb
			int len; //记录每次读取的字节个数
			while((len=fis.read(bs))){
				//把读取到的有效字节数据,写入目标文件中
				fos.write(bs,0,len);
			}
			//释放资源
			fis.close();
			fos.close();
			
2)缓冲字节流复制
			//创建流对象
			BufferedInputStream bis = new BufferedInputStream(new FileInputStream("文件路径"));
			BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("文件路径"));
			//如果是一次读一个字节,则read返回的是读取的字节
			//一次读写多个字节
			byte[] bs = new byte[1024]; //1024byte=1kb
			int len; //记录每次读取的字节个数,读取的内容存储到字节数组中
			while((len=bis.read(bs))!=-1){
				//把读取到的有效字节数据,写入目标文件中
				bos.write(bs,0,len);
			}
			//释放资源
			bis.close();
			bos.close();

<2>字符流[只能读取文本文件(用记事本打开能读懂的就是文本文件)]
字符输入流:Reader(抽象类)
–FileReader: 读取文件中的字符数据
–BufferedReader: 对FileReader进行包装,提高读取字符的效率
字节输出流: Writer(抽象类)
–FileWriter: 往文件中写字符数据
–BufferedWriter: 对FileWriter进行包装,提高写入字符的效率

		1)普通字符流复制
			//创建流对象
			FileReader fr = new FileReader("文件路径");
			FileWriter fw = new FileWriter("文件路径");
		
			//一次读写多个字符
			char[] bs = new char[1024]; //1024byte=1kb
			int len; //记录每次读取的字节个数
			while((len=fr.read(bs))!=-1){
				//把读取到的有效字节数据,写入目标文件中
				fw.write(bs,0,len);
			}
			
			//释放资源
			fr.close();
			fw.close();
			
		
		2)字符缓冲流复制
			//创建流对象
			BuferedReader br = new BufferedReader(new FileReader("文件路径"));
			BuferedWriter bw = new BuferedWriter(new FileWriter("文件路径"));
		
			//一次读一行
			String line; //记录每次读取的那一行
			while((line=br.readLine())!=null){
				//把读取到的有效字节数据,写入目标文件中
				bw.write(line);
				bw.newLine(); //换行,具备跨平台性
				bw.flush; // 刷新
			}
			
			//释放资源
			br.close();
			bw.close();

3)字节流以及字符流的注意事项:
<1>为什么字节流读取文本文件,可能会出现乱码?
字节流一次读一个字节,而不管GBK还是UTF-8一个中文都是多个字节,用字节流每次只能读其中的一部分,所以就会出现乱码问题。

<2>字符流怎么解决乱码问题
通过字符串的getBytes(“码表名”) 和 new String(byte1, “码表名”)进行编码和解码

<3>字符流写数据
a.创建字符输出流对象:如果文件不存在,就新建,但是要保证父级路径的存在
如果文件存在就清空
b.写数据:写出int类型的整数,实际写出的是整数在码表上对应的字母
写出字符串数据,是把字符串本身原样写出。

<4>字符流底层为【字节流+编码表】

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陪雨岁岁年年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值