Java IO(IO流)-2

IO流 第一部分 (OutputStreamWriter BufferOutputStream)

转换流

超类为Reader和Writer

是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节。它的作用的就是,将字符串按照指定的编码表转成字节,在使用字节流将这些字节写出去。

先将字符交给转换流,然后转换流去查询指定的编码表,然后将查询后的对应编码表中的内容返回给对应的字节流,然后字节流进行对应的操作

OutputStreamWriter

构造方法

  • OutputStreamWriter(OuputStream out) // 传递进来一个OuputStream(多态)

  • OutputStreamWriter(OutputStream out, String charsetName) String charsetName 传递编码表名字 GBK UTF-8

使用

    						FileOutputStream fos = new FileOutputStream("c:\\utf.txt");
						//创建转换流对象,构造方法保证字节输出流,并指定编码表是UTF-8
						OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
						osw.write("你好");
						osw.close();

InputSteamReader(字节流向字符)

先将通过InputStream类读取字符,然后给InputSteamReader , InputSteamReader 查询编码表然后转换成字符输出

构造方法

  • InputSteamReader(InputStream out)

  • InputSteamReader(InputStream out,String charsetName)

使用

            InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream("d://deo2.txt"));
            char[] b = new char[2];
            
            int len = 0;
            
            while((len = inputStreamReader.read(b))!=-1){
                System.out.println(new String(b,0,len));
            }
            inputStreamReader .close();
        

输出流的子类

子类可以直接操作文件,但是不能指定编码格式,默认使用系统默认的格式

FileReader fr = new FileReader("a.txt");

缓冲流

  • 提高输入输出的效率

  • 分为字节缓冲流与字符缓冲流

BufferedOutputStream(字节输出流缓冲流)

构造方法

  • BufferedOutputStream(OutputStream out)

使用

					//创建字节输出流缓冲流的对象,构造方法中,传递字节输出流
					BufferedOutputStream bos = new
							BufferedOutputStream(new FileOutputStream("c:\\buffer.txt"));
					
					bos.write(55);
					
					byte[] bytes = "HelloWorld".getBytes();
					
					bos.write(bytes);
					
					bos.write(bytes, 3, 2);
					
					bos.close();

BufferedInputStream (字节输入流缓冲流)

构造方法

  • BufferedInputStream(InputStream in)
					//创建字节输入流的缓冲流对象,构造方法中包装字节输入流,包装文件
					BufferedInputStream bis = new 
							BufferedInputStream(new FileInputStream("c:\\buffer.txt"));
					byte[] bytes = new byte[10];
					int len = 0 ;
					while((len = bis.read(bytes))!=-1){
						System.out.print(new String(bytes,0,len));
					}
					bis.close();

BufferedWriter(字符输出流缓冲流)

构造方法

  • BufferedWriter(Writer w)

BufferedWriter具有一个特殊的方法 newLine() 作用为换行 (平台无关性)

					FileWriter fw = new FileWriter("c:\\buffer.txt");
					BufferedWriter bfw = new BufferedWriter(fw);
					
					bfw.write(100);
                                        bfw.newLine();
					bfw.flush();

BufferedReader

构造方法

BufferedReader(Reader r)

有独特的方法 readLine() 读取一行 , 只返回行的有效字符,不包含\r\n (即读出来的数据是一行)

    					int lineNumber = 0;
					//创建字符输入流缓冲流对象,构造方法传递字符输入流,包装数据源文件
					BufferedReader bfr = new BufferedReader(new FileReader("c:\\a.txt"));
					//调用缓冲流的方法 readLine()读取文本行
					//循环读取文本行, 结束条件 readLine()返回null
					String line = null;
					while((line = bfr.readLine())!=null){
						lineNumber++;
						System.out.println(lineNumber+"  "+line);
					}
					bfr.close();

通过字符流缓冲区流复制文本文件

					BufferedReader bfr = new BufferedReader(new FileReader("c:\\w.log"));	
					BufferedWriter bfw = new BufferedWriter(new FileWriter("d:\\w.log"));
					//读取文本行, 读一行,写一行,写换行
					String line = null;
					while((line = bfr.readLine())!=null){
						bfw.write(line);
						bfw.newLine();
						bfw.flush();
					}
					bfw.close();
					bfr.close();
posted @ 2017-10-21 20:12  cccc_hi  阅读(354)  评论(0编辑  收藏  举报