IO流的学习-字符流。

1.字符流输出Writer

字符流的超类是FileWrite,字符流的方法和字节流的方法基本一样,区别在于flush()刷新发放,和由byte变为char。

注意:
1.flush刷新方法,是在字符流里才有的,字节没有。
2.flush最好多刷新,因为不刷新,数据就存储在内存里,消耗内存,close方法可能也有刷新的方法。
3.只能写文本,对图片,文件不可以。


*  void write(int c)
				*  写入单个字符
			* void write(String str)  
				* 写入字符串
			* void write(String str, int off, int len) 
				* 写入字符串的某一部分
			* void write(char[] cbuf)  
				* 写入字符数组
			* abstract  void write(char[] cbuf, int off, int len)  
				*  写入字符数组的某一部分


/*
			 *   字符输出流
			 *     java.io.Writer 所有字符输出流的超类
			 *   写文件,写文本文件
			 *   
			 *   写的方法 write
			 *     write(int c) 写1个字符
			 *     write(char[] c)写字符数组
			 *     write(char[] c,int,int)字符数组一部分,开始索引,写几个
			 *     write(String s) 写入字符串
			 *     
			 *   Writer类的子类对象 FileWriter
			 *   
			 *   构造方法:  写入的数据目的
			 *     File 类型对象
			 *     String 文件名
			 *     
			 *   字符输出流写数据的时候,必须要运行一个功能,刷新功能
			 *   flush()
			 */
			public class WriterDemo {
				public static void main(String[] args) throws IOException{
					FileWriter fw = new FileWriter("c:\\1.txt");
					
					//写1个字符
					fw.write(100);
					fw.flush();
					
					//写1个字符数组
					char[] c = {'a','b','c','d','e'};
					fw.write(c);
					fw.flush();
					
					//写字符数组一部分
					fw.write(c, 2, 2);
					fw.flush();
					
					//写如字符串
					fw.write("hello");
					fw.flush();
					
					fw.close();
				}
			}



2.字符流读取Reader

注意:
1.写的时候有write(String s)方法,而读的时候没有reader(String s)方法,因为读的时候无法定义String的范围,比如“abc”,其中“a”是String,其中“ab”也是String,所以无法定义范围。
2.字符流和字节流,有一个区别,字节流不推荐读取汉字,而字符流,专门来处理文本文件。可以读取汉字。
3.文本文件的定义:只要能拿记事本打开,能看懂里面的文字的,都算是文本文件。
			*  int read() 
				* 读取单个字符
			* int read(char[] cbuf) 
				* 将字符读入数组
			* abstract  int read(char[] cbuf, int off, int len)  
				* 将字符读入数组的某一部分。

/*
			 *  字符输入流读取文本文件,所有字符输入流的超类
			 *    java.io.Reader
			 *  专门读取文本文件
			 *  
			 *  读取的方法 : read()
			 *   int read() 读取1个字符
			 *   int read(char[] c) 读取字符数组
			 *   
			 *   Reader类是抽象类,找到子类对象 FileReader
			 *   
			 *   构造方法: 绑定数据源
			 *     参数:
			 *        File  类型对象
			 *        String文件名
			 */
			public class ReaderDemo {
				public static void main(String[] args) throws IOException{
					FileReader fr = new FileReader("c:\\1.txt");
					/*int len = 0 ;
					while((len = fr.read())!=-1){
						System.out.print((char)len);
					}*/
					char[] ch = new char[1024];
					int len = 0 ;
					while((len = fr.read(ch))!=-1){
						System.out.print(new String(ch,0,len));
					}
					
					fr.close();
				}
			}


3.flush方法和close方法区别

注意:
1.只有在字符流,去写文本write的时候,才去flush。其他的情况不需要flush。
2.flush是刷新,close是刷新完,在关闭。
		*a: flush()方法
			* 用来刷新缓冲区的,刷新后可以再次写出,只有字符流才需要刷新
		*b: close()方法
			* 用来关闭流释放资源的的,如果是带缓冲区的流对象的close()方法,不但会关闭流,还会再关闭流之前刷新缓冲区,关闭后不能再写出 

flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。

close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。


4.复制文本案例


/*
			 *  字符流复制文本文件,必须文本文件
			 *  字符流查询本机默认的编码表,简体中文GBK
			 *  FileReader读取数据源
			 *  FileWriter写入到数据目的
			 */
			public class Copy_2 {
				public static void main(String[] args) {
					FileReader fr = null;
					FileWriter fw = null;
					try{
						fr = new FileReader("c:\\1.txt");
						fw = new FileWriter("d:\\1.txt");
						char[] cbuf = new char[1024];
						int len = 0 ;
						while(( len = fr.read(cbuf))!=-1){
							fw.write(cbuf, 0, len);
							fw.flush();
						}
						
					}catch(IOException ex){
						System.out.println(ex);
						throw new RuntimeException("复制失败");
					}finally{
						try{
							if(fw!=null)
								fw.close();
						}catch(IOException ex){
							throw new RuntimeException("释放资源失败");
						}finally{
							try{
								if(fr!=null)
									fr.close();
							}catch(IOException ex){
								throw new RuntimeException("释放资源失败");
							}
						}
					}
				}
			}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值