文件数据IO操作
1.Reader和Writer操作
1.1字符流原理
Reader:是所有字符输入流的父类
Writer:是所有的字符输出流父类
字符流是以字符(char)为单位记性读取数据,一次读取一个Unicode
字符流的底层也是字节流
1.2常用方法
Reader常用方法:
int read():指读取流中的一个字符,返回值int型字符“低16位有效”,
int read(char[] chs):读取流中长度为length个字节,并存入到该字符数组中,返回值为实际读取到的字节数组
Writer常用方法
void writer(int c):写出一个字符,“低16位有效”
void writer(char[] chs):
void writer(String str):
void writer(char[] chs,int offset,int len):
2.转换流:可以设定字符集
2.1字符转换流原理
InputStreamReader:字符输出流,可以设定字符集,从流中可以按照该编码格式将字节数据转换为字符读取
OutputStreamWriter:字符输出流,可以设定字符集,并将字符按照相应的编码方式转换为相应字节然后写出
2.2使用OSW
代码如下:
/**
* 按照指定编码写出字符串,编码名称忽略大小写
* @throws IOException
*/
@Test
public void testOSW() throws IOException{
FileOutputStream fos=new FileOutputStream("osw.txt");
OutputStreamWriter osw=new OutputStreamWriter(fos,"GBK");
osw.write("Mr 范");
osw.close();
}
2.3使用ISR
代码如下
/**
* 按照指定编码读取字符串
* @throws IOException
*/
@Test
public void testISR() throws IOException{
FileInputStream fis=new FileInputStream("osw.txt");
//按照指定的编码格式读取字符串,编码名称忽略大小写
InputStreamReader isr=new InputStreamReader(fis,"GBK");
int chs=-1;
while((chs=isr.read())!=-1){
System.out.print((char)chs);
}
//System.out.println("读取完毕");
isr.close();
}
3.PrintWriter
3.1创建PW对象
PrintWriter是带有自动行刷新的缓冲字符输出流
代码如下:
/**
* 测试缓冲字符输出流
* @throws FileNotFoundException
*/
@Test
public void testPrintWriter() throws FileNotFoundException{
PrintWriter pw=new PrintWriter("pw.txt");
pw.println("大家好");
pw.println("Hello!");
pw.println("bye!");
pw.close();
}
4.BufferedReader
4.1缓冲字符输入流,内部提供了缓冲区,提高了读取效率
代码如下:
@Test
public void testBuffered() throws IOException{
FileInputStream fis=new FileInputStream("pw.txt");
InputStreamReader isr=new InputStreamReader(fis);
BufferedReader br=new BufferedReader(isr);
String str=null;
while((str=br.readLine())!=null){
System.out.println(str);
}
br.close();
}