IO流

1:IO流(掌握)
	(1)IO流的分类:(理解)
		A:流向不同
			输入流
			输出流
		B:操作数据不同
			字节流
			字符流(就是文件数据用记事本打开并能够读懂的数据就用字符流)
	(2)IO流的体系结构(掌握)
		IO流
			|--字节流(自学一下字节流,实现复制一张图片)
				|--输入流(读取数据)
					|--InputStream
						|--FileInputStream(基本流)
						|--BufferedInputStream(高效流) 就是高效的作用,没有特殊方法
				|--输出流(写入数据)
					|--OutputStream
						|--FileOutputStream(基本流)
						|--BufferedOutputStream(高效流) 就是高效的作用,没有特殊方法
			|--字符流
				|--输入流(读取数据)
					|--Reader
						|--FileReader(基本流)
						|--BufferedReader(高效流)
				|--输出流(写入数据)
					|--Writer
						|--FileWriter(基本流)
						|--BufferedWriter(高效流)
	(3)基本字符流写入数据(掌握)
		FileWriter:
			步骤:
				创建字符输出流对象
				写入数据
					write(String str)
					write(int ch)
					write(char[] chs,int index,int len)
				释放资源

			代码体现:
				FileWriter fw = new FileWriter("fw.txt");

				fw.write("hello,io,我来了");
				fw.flush();

				fw.close();

			问题?
				创建字符输出流对象做了几件事情?
					做3件事,1,创建一个字符流对象,2调用系统功能创建一个文件,3将字符流对象指向这个文件.
				为什么需要刷新缓冲区?
					由于我们存的是字符数据,它不能直接写入文件,它被写入到缓冲区中.
				既然close()和flush()都可以刷新缓冲区,那么,他们的区别是什么?
					区别是,close()刷新后会关闭资源,flush()只能刷新缓冲区.
				如果实现数据的换行?
					1,BufferedWriter中的newLine()方法.
				如何实现数据的追加?
					public FileWriter(File file,boolean append)
	(4)基本字符流读取数据(掌握)
		FileReader:
			步骤:
				创建字符输入流对象
				读取数据
					int read()
					int read(char[] chs)
				释放资源

			代码体现:
				FileReader fr = new FileReader("fw.txt");

				//方式1
				int ch = 0;
				while((ch=fr.read())!=-1)
				{
					System.out.print((char)ch);
				}

				//方式2
				char[] chs = new char[1024];
				int len = 0;
				while((len=fr.read(chs))!=-1)
				{
					System.out.print(String.valueOf(chs,0,len));
				}

				fr.close();
	(5)复制文本文件(掌握)
		不管是用哪种方式实现,请大家记住分析出数据源和目的地:
		数据源:
			a.txt -- Reader -- FileReader
		目的地:
			b.txt -- Writer -- FileWriter

		代码体现:
			FileReader fr = new FileReader("a.txt");
			FileWriter fw = new FileWriter("b.txt");

			//方式1,下面的(count++%1024==0)表示每1024个就刷一下
			int ch = 0;
			//int count = 0;
			while((ch=fr.read())!=-1)
			{
				fw.write(ch);

				//if(count++%1024==0)
				//{
					//fw.flush();
				//}
				
			}

			//方式2
			char[] chs = new char[1024];
			int len = 0;
			while((len=fr.read(chs))!=-1)
			{
				fw.write(chs,0,len);
				fw.flush();
			}

			fw.close();
			fr.close();
	(6)高效的流(掌握)
		高效流,处理流,高级流:都是建立在基本流基础之上的流。

		只起到高效的作用,基本的读写还得依靠基本的流对象。
		BufferedReader:
			包装了Reader
			特殊方法:读取一行
				String readLine()
		BufferedWriter:
			包装了Writer
			特殊方法:换行
				void newLine()
	(7)案例(掌握 补齐)
		使用高效流复制文本文件
		方式1:一次读取一个字符
		BufferedReader br=new BufferedReader(new FileReader("d:\\a.txt"));
		BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\b.txt"));
		int ch=0;
		int count=0;
		while((ch=br.read())!=-1){
			
			bw.write(ch);
			if(count%2000){
				bw.flush();
				count++;
			}
		}
		br.close();
		bw.close();

		方式2:一次读取一个字符数组
		BufferedReader br=new BufferedReader(new FileReader("d:\\a.txt"));
		BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\b.txt"));
		char[] ch=new char[1024];
		int len=0;
		while((len=br.read(ch))!=-1){
			bw.write(ch,0,len);
			bw.flush();
		}
		br.close();
		bw.close();

		方式3:一次读取一个字符串
		BufferedReader br=new BufferedReader(new FileReader("d:\\a.txt"));
		BufferedWriter bw=new BufferedWriter(new FileWriter("d:\\b.txt"));
		String s=null;
		while((s=br.readLine())!=null){
			bw.write(s);
			bw.newLine();
			bw.flush();
		}
		bw.close();
		br.close();
		
				


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值