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