zoukankan      html  css  js  c++  java
  • IO流(三)

    字符流(掌握) 

    	
    	1、字节流操作中文数据不是特别的方便,所以就出现了转换流。
    	   转换流的作用就是把字节流转换字符流来使用。
    	2、转换流其实是一个字符流
    		字符流 = 字节流 + 编码表
    	3、编码表
    		A:就是由字符和对应的数值组成的一张表
    		B:常见的编码表
    			ASCII
    			ISO-8859-1
    			GB2312
    			GBK
    			GB18030
    			UTF-8
    		C:字符串中的编码问题
    			编码
    				String -- byte[]
    					//通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
    					a:String(byte[] bytes) 
    					//通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。
    					b:String(byte[] bytes, String charsetName) 
    					
    			解码
    				byte[] -- String
    					a:byte[] getBytes() 
    					使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 
    					b:byte[] getBytes(Charset charset) 
    					使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。 
    
    	4、IO流中的编码问题(字节流转换为字符流)
    		A:OutputStreamWriter
    			a:OutputStreamWriter的构造方法:
    					OutputStreamWriter(OutputStream os):默认编码,GBK
    					OutputStreamWriter(OutputStream os,String charsetName):指定编码。
    			b:OutputStreamWriter的方法:
    					public void write(int c):写一个字符
    					public void write(char[] cbuf):写一个字符数组
    					public void write(char[] cbuf,int off,int len):写一个字符数组的一部分
    					public void write(String str):写一个字符串
    					public void write(String str,int off,int len):写一个字符串的一部分
    
    			c:面试题:close()和flush()的区别?
    						close()关闭流对象,但是先刷新一次缓冲区。关闭之后,流对象不可以继续再使用了。
    						flush()仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。
    		B:InputStreamReader
    			a:InputStreamReader的构造方法:
    					InputStreamReader(InputStream is):默认编码,GBK
    					InputStreamReader(InputStream is,String charsetName):指定编码
    			b:InputStreamReader的方法:
    					int read():一次读取一个字符
    					int read(char[] chs):一次读取一个字符数组
    		C:编码问题其实很简单
    			编码只要一致即可
    	5、字符流
    		Reader
    			|--InputStreamReader
    				|--FileReader
    			|--BufferedReader
    				BufferedReader字符缓冲流的特殊方法:String readLine();	//一次读取一个字符串
    		Writer
    			|--OutputStreamWriter
    				|--FileWriter
    			|--BufferedWriter
    				BufferedReader字符缓冲流的特殊方法:void newLine();	//写一个换行符
    												void write(String line);	//一次写一个字符串
    	6、复制文本文件(5种方式)	
    

    IO流小结(掌握) 

    	
    	IO流
    		|--字节流
    			|--字节输入流
    				InputStream
    					int read():一次读取一个字节
    					int read(byte[] bys):一次读取一个字节数组
    				
    					|--FileInputStream
    					|--BufferedInputStream
    			|--字节输出流
    				OutputStream
    					void write(int by):一次写一个字节
    					void write(byte[] bys,int index,int len):一次写一个字节数组的一部分
    					
    					|--FileOutputStream
    					|--BufferedOutputStream
    		|--字符流
    			|--字符输入流
    				Reader
    					int read():一次读取一个字符
    					int read(char[] chs):一次读取一个字符数组
    					
    					|--InputStreamReader
    						|--FileReader
    					|--BufferedReader
    						String readLine():一次读取一个字符串
    						|--LineNumberReader
    							public int getLineNumber():获得当前行号 
    							public void setLineNumber(int lineNumber)
    			|--字符输出流
    				Writer
    					void write(int ch):一次写一个字符
    					void write(char[] chs,int index,int len):一次写一个字符数组的一部分
    					
    					|--OutputStreamWriter
    						|--FileWriter
    					|--BufferedWriter
    						void newLine():写一个换行符
    						
    						void write(String line):一次写一个字符串
    

      

    案例(理解 练习一遍) 

    	
    	A:复制文本文件 5种方式(掌握)
    		/*
    		* 需求:把当前项目目录下的a.txt内容复制到当前项目目录下的b.txt中(要求换行)
    		* 
    		* 数据源:
    		* 		a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader -- FileReader -- BufferedReader
    		* 目的地:
    		* 		b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter -- FileWriter -- BufferedWriter
    		*/
    			public class CopyFileDemo2 {
    				public static void main(String[] args) throws IOException {
    					// 封装数据源
    					BufferedReader br = new BufferedReader(new FileReader("a.txt"));
    					// 封装目的地
    					BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
    
    					// 读写数据
    					String line = null;
    					while ((line = br.readLine()) != null) {
    						bw.write(line);
    						bw.newLine();
    						bw.flush();
    					}
    
    					// 释放资源
    					bw.close();
    					br.close();
    				}
    			}
    	B:复制图片(二进制流数据) 4种方式(掌握)
    	C:把集合中的数据存储到文本文件
    	D:把文本文件中的数据读取到集合并遍历集合
    	E:复制单级文件夹
    	F:复制单级文件夹中指定的文件并修改名称
    		回顾一下批量修改名称
    	G:复制多级文件夹
    	H:键盘录入学生信息按照总分从高到低存储到文本文件
    	I:把某个文件中的字符串排序后输出到另一个文本文件中
    	J:用Reader模拟BufferedReader的特有功能
    	K:模拟LineNumberReader的特有功能
    
  • 相关阅读:
    qt教程
    linux shell 教程
    CMakeList.txt学习
    tx2上直接编译带contrib cuda的opencv
    tx2 opencv交叉编译后的对应文件的放置位置
    opencv4.1.0 交叉编译遇到的问题
    docker 学习
    c++ 类注意点
    数据库整理(五)数据库编程 触发器 事务 过程
    数据库整理(四)数据库安全性与完整性
  • 原文地址:https://www.cnblogs.com/zhanwang/p/7622855.html
Copyright © 2011-2022 走看看