io流之转换流与缓冲流

转换流:输出转换字符流

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

转换流概述

OutputStreamWriter:字符输出流——写出数据

        public OutputStreamWriter(OutputStream out)

        public OutputStreamWriter(OutputStream out,String charsetName)

InputStreamReader :字符输入流——读取数据

        public InputStreamReader(InputStream in)

        public InputStreamReader(InputStream in,String charsetName)
先创建一个txt文件编码为utf-8的格式,如果文本文件跟你的程序不一个码表,则用转换流进行转换

package com.oracle.demo01;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class Demo01 {
	  public static void main(String[] args) throws IOException {
		//明确目的地
		  FileOutputStream fos=new FileOutputStream("D:\\java\\a.txt");
		//创建转换流
		  OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
		//写入字符
		  osw.write("起于凡而非凡");
		  osw.flush();
		//释放资源
		  osw.close();
	}
}

  

package com.oracle.demo01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

public class Demo02 {
	   public static void main(String[] args) throws IOException {
	   //明确数据源
		 FileInputStream fis= new FileInputStream("D:\\java\\a.txt");
	   //创建转换流对象
		 InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
		 int len=0;
		 char[] ch=new char[1024];
		 //开始读
		 while((len=isr.read(ch))!=-1){
			 System.out.println(new String(ch,0,len));
		 }
	     //释放资源
		 isr.close();
	}
}

  把a.txt文件里的内容以及格式同样的复制到a.txt文件里

package com.oracle.demo01;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

public class Copy {
	   public static void main(String[] args) throws IOException {
	   //1.先明确数据源
		 FileInputStream fis=new FileInputStream("D:\\java\\a.txt");
	   //2.创建字符输入转换流
		 InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
	   //3.明确目的地
		 FileOutputStream fos=new FileOutputStream("D:\\java\\aa.txt");
	   //4.创建字符输出转换流
		 OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");
	   //开始复制
		 char[] ch=new char[1024];
		 int len=0;
		 while((len=isr.read(ch))!=-1){
			 osw.write(ch,0,len);
			 osw.flush();
		 }
		  //释放资源
		  isr.close();
		  osw.close();
	}
}

缓冲流:就是用来加速的流,提供高效的写入

关键字:Buffered

字节缓冲流有两个分别是:

字节缓冲输入流:BufferedInputStream

字节缓冲输出流:BufferedOutputStream

package com.oracle.demo02;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo01 {
	   public static void main(String[] args) throws IOException {
	   //明确目的地(输出)写到txt文件里
	     FileOutputStream fos=new FileOutputStream("D:\\java\\hello.txt");
	   //创建缓冲区对象(给字节输出流添加缓冲区)
	     BufferedOutputStream bos=new BufferedOutputStream(fos);
	   //写入字节
         bos.write("abc123".getBytes());
       //释放资源
         bos.close();
         
	}
}

以上代码是字节缓冲输出流,我要明确目的地是哪个文件,然后创建缓冲区用来加速,写入字节,最后谁调用的就释放谁,最后运行,查看一下成没成功。

字节缓冲输入流:BufferedInputStream

我要从文件里面读取数据

package com.oracle.demo02;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

public class Demo02 {
	   public static void main(String[] args) throws IOException {
		//明确数据源(读)把TXT文件里的内容读取出来
		  FileInputStream fis=new FileInputStream("D:\\java\\hello.txt");
		//创建字节输入缓冲流
		  BufferedInputStream bis=new BufferedInputStream(fis);
		  int len=0;
		  while((len=bis.read())!=-1){
			  System.out.print((char)len);
		  }
		  //释放资源
		  bis.close();
	}
}

字符缓冲流分两个:

字符缓冲输入流:BufferedReader    eadLine(); 读取一个文本行,包含该行内容的字符串,不包含任何终止符,返回null;

字符缓冲输出流:BufferedWriter 独有的方法newLine(); 换行符

package com.oracle.demo02;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class Demo03 {
	   public static void main(String[] args) throws IOException {
	   //明确目的地
		 FileWriter fw=new FileWriter("D:\\java\\hello.txt",true);
	   //创建字符缓冲输出流
		 BufferedWriter bw=new BufferedWriter(fw);
	   //写入字节
		 bw.write("你好,熊大!");
		 bw.flush();
	   //换行
		 bw.newLine();
		 bw.write("我很好光头强");
		 //释放资源
		 bw.close();
		 
	}
}

  

package com.oracle.demo02;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Demo04 {
    public static void main(String[] args) throws IOException {
		//明确数据源
    	  FileReader fr=new FileReader("D:\\java\\hello.txt");
       //创建字符输入缓冲流
    	  BufferedReader br=new BufferedReader(fr);
    	  String line=null;
    			  /*br.readLine();
    	  System.out.println(line);
    	  
    	  line=br.readLine();
    	  System.out.println(line);
    	  
    	  line=br.readLine();
    	  System.out.println(line);*/
          while((line=br.readLine())!=null){
        	  System.out.println(line);
          }
          //释放资源
    	  br.close();  	
	}
}

  

 

eadLine()读取一个文本行,包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

 

posted @ 2019-06-20 13:25  麻包缝裤衩  阅读(155)  评论(0编辑  收藏  举报