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

浙公网安备 33010602011771号