zoukankan      html  css  js  c++  java
  • IO流小节

    1:字符流
    	(1)字节流操作中文数据不是特别的方便,所以就出现了转换流。
    	   转换流的作用就是把字节流转换字符流来使用。
    	(2)转换流其实是一个字符流
    		字符流 = 字节流 + 编码表
    	(3)编码表
    		A:就是由字符和对应的数值组成的一张表
    		B:常见的编码表
    			ASCII
    			ISO-8859-1
    			GB2312
    			GBK
    			GB18030
    			UTF-8
    		C:字符串中的编码问题
    			编码
    				String -- byte[]
    			解码
    				byte[] -- String
    	(4)IO流中的编码问题
    		A:OutputStreamWriter
    			OutputStreamWriter(OutputStream os):默认编码,GBK
    			OutputStreamWriter(OutputStream os,String charsetName):指定编码。
    		B:InputStreamReader
    			InputStreamReader(InputStream is):默认编码,GBK
    			InputStreamReader(InputStream is,String charsetName):指定编码
    		C:编码问题其实很简单
    			编码只要一致即可
    	(5)字符流
    		Reader
    			|--InputStreamReader
    				|--FileReader
    			|--BufferedReader
    		Writer
    			|--OutputStreamWriter
    				|--FileWriter
    			|--BufferedWriter
    	(6)复制文本文件(5种方式)
    
    2: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():一次读取一个字符串
    			|--字符输出流
    				Writer
    					void write(int ch):一次写一个字符
    					void write(char[] chs,int index,int len):一次写一个字符数组的一部分
    					
    					|--OutputStreamWriter
    						|--FileWriter
    					|--BufferedWriter
    						void newLine():写一个换行符
    						readline():一次读一行,null结束
    						void write(String line):一次写一个字符串
    

      

    1:登录注册IO版本案例(掌握)
    	要求,对着写一遍。
    	
    	cn.itcast.pojo User
    	cn.itcast.dao UserDao
    	cn.itcast.dao.impl UserDaoImpl(实现我不管)
    	cn.itcast.game GuessNumber
    	cn.itcast.test	UserTest
    
    2:数据操作流(操作基本类型数据的流)(理解)
    	(1)可以操作基本类型的数据
    	(2)流对象名称	
    		DataInputStream
    		DataOutputStream
    
    3:内存操作流(理解)
    	(1)有些时候我们操作完毕后,未必需要产生一个文件,就可以使用内存操作流。
    	(2)三种
    		A:ByteArrayInputStream,ByteArrayOutputStream
    		B:CharArrayReader,CharArrayWriter
    		C:StringReader,StringWriter
    
    4:打印流(掌握)
    	(1)字节打印流,字符打印流
    	(2)特点:
    		A:只操作目的地,不操作数据源
    		B:可以操作任意类型的数据
    		C:如果启用了自动刷新,在调用println()方法的时候,能够换行并刷新
    		D:可以直接操作文件
    			问题:哪些流可以直接操作文件呢?
    			看API,如果其构造方法能够同时接收File和String类型的参数,一般都是可以直接操作文件的
    	(3)复制文本文件
    		BufferedReader br = new BufferedReader(new FileReader("a.txt"));
    		PrintWriter pw = new PrintWriter(new FileWriter("b.txt"),true);
    		
    		String line = null;
    		while((line=br.readLine())!=null) {
    			pw.println(line);
    		}
    		
    		pw.close();
    		br.close();
    			
    5:标准输入输出流(理解)
    	(1)System类下面有这样的两个字段
    		in 标准输入流
    		out 标准输出流
    	(2)三种键盘录入方式
    		A:main方法的args接收参数
    		B:System.in通过BufferedReader进行包装
    			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		C:Scanner
    			Scanner sc = new Scanner(System.in);
    	(3)输出语句的原理和如何使用字符流输出数据
    		A:原理
    			System.out.println("helloworld");
    			
    			PrintStream ps = System.out;
    			ps.println("helloworld");
    		B:把System.out用字符缓冲流包装一下使用
    			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
    6:随机访问流(理解)
    	(1)可以按照文件指针的位置写数据和读数据。
    	(2)案例:
    		A:写数据
    		B:读数据
    		C:获取和改变文件指针的位置
    
    7:合并流(理解)
    	(1)把多个输入流的数据写到一个输出流中。
    	(2)构造方法:
    		A:SequenceInputStream(InputStream s1, InputStream s2) 
    		B:SequenceInputStream(Enumeration<? extends InputStream> e) 
    
    8:序列化流(理解)
    	(1)可以把对象写入文本文件或者在网络中传输
    	(2)如何实现序列化呢?
    		让被序列化的对象所属类实现序列化接口。
    		该接口是一个标记接口。没有功能需要实现。
    	(3)注意问题:
    		把数据写到文件后,在去修改类会产生一个问题。
    		如何解决该问题呢?
    			在类文件中,给出一个固定的序列化id值。
    			而且,这样也可以解决黄色警告线问题
    	(4)面试题:
    		什么时候序列化?
    		如何实现序列化?
    		什么是反序列化?
    
    9:Properties(理解)
    	(1)是一个集合类,Hashtable的子类
    	(2)特有功能
    		A:public Object setProperty(String key,String value)
    		B:public String getProperty(String key)
    		C:public Set<String> stringPropertyNames()
    	(3)和IO流结合的方法
    		把键值对形式的文本文件内容加载到集合中
    		public void load(Reader reader)
    		public void load(InputStream inStream)
    
    		把集合中的数据存储到文本文件中
    		public void store(Writer writer,String comments)
    		public void store(OutputStream out,String comments)
    	(4)案例:
    		A:根据给定的文件判断是否有键为"lisi"的,如果有就修改其值为100
    		B:写一个程序实现控制猜数字小游戏程序不能玩超过5次
    
    10:NIO(了解)
    	(1)JDK4出现的NIO,对以前的IO操作进行了优化,提供了效率。但是大部分我们看到的还是以前的IO
    	(2)JDK7的NIO的使用	
    		Path:路径
    		Paths:通过静态方法返回一个路径
    		Files:提供了常见的功能
    			复制文本文件
    			把集合中的数据写到文本文件
    

      

    举例:从一个文本复制到另一个文本高效方法
    
    BufferedReader br=new BufferedReader(new FileReader("源路径"));
    PrintWriter  pw=new PrintWriter(new FileWriter("目标路径"));
    
    string line=null;
    while((line=br.readLine())!=null)
        {
           pw.println(line);//这句就相当于pw.write(line);  pw.newline();   pw.flush();     
    }
    
    br.close();
    pw.close();

    举例:
    1.properties类的用法

    properties是hashtable的子类,既是map的子类,注意properties并不是泛型类.

    格式:
    properties pps=new properties();
    pps.set(key,value);
        .
        .
        .
    set < > p=pps.keyset();
    value=pps.get(p);//用高级for
    方法:
    set<> keyset();
    set<map.entry<>> entryset();
    .load();读入集合properties
    .stroe();把集合中元素读入文本中

    2.把文件中的键值对读入集合properties
    properties ps=new properties();
    Read r=new FileReader("源文件");
    ps.load(r);
    r.close();

    3.把集合中元素写入文本中
    properties ps=new properties();
    ps.set();
    ps.set();
    .
    .
    .
    writer w=new Filewriter ("目标文件");
    ps.store(w,"描述");












      

  • 相关阅读:
    ps-- 制作磨砂背景
    ps -- 证件照
    抠图--薄,透
    60后发送短信的方法
    小项目 -- 验证码.js
    小项目
    小项目 -- phone.js
    基于GDAL提取地物,并生成png,最后加载到网页上(二)
    根据范围获取影像瓦片,并生成GeoTIFF 文件《一》
    Ubuntu 10.4 +NVIDIA GTX 1070 显卡驱动更新
  • 原文地址:https://www.cnblogs.com/dandandeyoushangnan/p/4669828.html
Copyright © 2011-2022 走看看