(十八)Java IO流(Java基础笔记)

一、字符流

1、输入输出流

1、特点:

是数据传输的一套机制,往内存传输的数据的输入流,内存往外传输数据的是输出流

2、分类:

根据数据的传输方式可分为:

  • 字符流
  • 字节流

3、基本流:

四大IO流字符流字节流
输入流字符输入流(Reader)字节输入流(InputStream)
输出流字符输出流(Writer)字节输出流(OutputStream)

4、存储获取数据

  • 位置:

硬盘 、内存、网络、外设

2、FileWriter类

1、创建对象

		FileWriter w=new FileWriter("E:\\1.txt");

2、路径

	1、如果路径正确但没有具体的文件就会创建一个空文件
	
	2、文件已经存在则会在创建一个空文件并覆盖之前的文件内容
	
 	3、保证在写数据之前有一个空文件

3、方法

  • flush()

    功能:冲刷缓冲区,不管缓冲区数据有没有存满都要进行传输,防止数据滞留在缓冲区产生数据丢失

  • close()

    功能:关闭数据连接通道,在关闭前,会自动进行冲刷缓冲区

  • writer()

    功能:底层基于缓冲区进行进行数据传输的,默认缓冲区数据装满才能进行传输,可以通过flush()和close()进行缓冲区冲刷

4、对象回收

将对象赋予 null 值,置为无用对象,在某个时间进行垃圾回收

3、FileReader类

1、创建对象

		FileReader r = new FileReader("E:\\1.txt");

2、方法

  • read()

    功能:返回的是读取到字符的编码值,读取结束的标志就是返回-1

3、自建缓冲区

			FileReader reader=new FileReader("D:\\a.txt");
			//读取数据
			//自建缓冲区---数组---字符流---字符数组
			char[] cs=new char[3];
			int len=-1;
			//reader.read(字符数组)--返回值就是每次读取到的字符个数
			while((len=reader.read(cs))!=-1){//读取到的内容存放到数组
				System.out.println(new String(cs,0,len));
			}
			reader.close();	//关流

4、异常处理
		1、在try块外进行声明对象,在try块里进行对象初始化
		
		2、保证对象已经进行正常的初始化才能进行关流操作
		
		3、不管关流成功还是失败都要对对象进行置为无用对象的操作,等待回收
		
		4、流关闭失败有可能是在自动冲刷缓冲区之前,保证数据不能滞留在缓冲区中,自己进行手动冲			刷缓冲区

二、缓冲流

1、BufferedReader类

1、功能:

给字符输入流提供缓冲区 , readLine() 读取文件一行

真正读取内容的流对象是FileReader,字符输入流,而缓冲流对象只是给字符输入流提供一个缓冲区

				
	BufferedReader br=new BufferedReader(new FileReader("D:\\3.txt"));
					
					//读取一行---结束标志null

					String str="";
					while((str=br.readLine())!=null){
						//
						System.out.println(str);
					}

2、BufferedWriter类

1、功能:

字符输出流,提供给字符输出流提供一个更大的缓冲区,newLine换行

			BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\b.txt"));
					//写出数据
					bw.write("abc");
					//换行---不管具体什么的操作系统
					//不同操作系统的换行符不一样
					//Windows---\r\n  linux---\n
					bw.newLine();
					bw.write("123");
					
					//关流--冲刷缓冲区
					bw.close();

3、装饰者模式
  • 模式:

    遇到一类问题,提供统一的解决方法

  • 设计者模式:

    在软件开发中,遇到一类问题,提供统一的解决方法

  • 装饰者模式:

    通过同类对象给本类对象增强功能或者完善功能

三、字节流

1、字节输出流

1、创建

字节输出流是以字节的形式向文件写入数据

		FileOutputStream os=new FileOutputStream("E:\\3.txt",true);

如果指定为true,则会在文件末尾添加

			FileOutputStream os=new FileOutputStream("D:\\c.txt",true);
			//写出数据
			os.write("中".getBytes());	//获取字节数组
			
			os.close();		//关流

2、字节输入流

1、创建

			FileInputStream is=new FileInputStream("D:\\1.txt");
			//读取数据  结束标志是-1

			//自建缓冲区
			byte[] bs=new byte[10];
			int len=-1;

			while((len=is.read(bs))!=-1){
				System.out.println(new String(bs,0,len));
			}
			
			is.close();		//关流

四、转换流

1、OutputStreamWriter类

功能:

实现字符流转成字节流,底层真正做的数据传输是字节输出流

	OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("D:\\12.txt"));

			//写出数据---字符串---字符
			osw.write("abc");
			
			osw.close();		//关流

2、InputStreamReader类

功能:

字节流转成字符流,底层从文件读取的是字节输入流,展示的时候使用字符输入流

	InputStreamReader isr=new InputStreamReader(new FileInputStream("D:\\12.txt"));
			//读取数据---字符数组--字符---字符流
			char[] cs=new char[5];
			int len=-1;
			while((len=isr.read(cs))!=-1){
				System.out.println(new String(cs,0,len));
			}

五、系统流

定义:

都是字节流组成,且都是静态的,不能关流

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值