Java核心API之缓冲字符流的使用介绍
1、缓冲字符输出流PrintWriter
PrintWriter具有自动行刷新的缓冲字符输出流,其内部提供了缓冲区,可以退提高写出效率,其具有丰富的构造方法。
常用方法有:
PrintWriter(File file);
PrintWriter(OutputStream out);
PrintWriter(OutputStream out,boolean antuflush);
PrintWriter(Writer writer);
PrintWriter(Writer writer,boolean antuoflush);
PrintWriter(String fileName);
那么什么是自动行刷新呢?其实是指PrintWriter可以按行写字符串的意思。
示例代码片段如下:
/*
* PrintWriter(File file);
* 该构造方法传入文件对象
*
* PrintWriter(OutputStream out);
* 该构造方法出入字节流
*
* PrintWriter(OutputStream out,boolean antuflush);
* 该构造方法第一个参数是字节流,第二个参数是自动行刷新标识
*
* PrintWriter(Writer writer);
* 该构造方法传入字符流
*
* PrintWriter(Writer writer,boolean antuoflush);
* 该构造方法第一参数传入字符流,第二个参数传入自动行刷新标识
*
* PrintWriter(String fileName);
* 该构造方法传入文件名称字符串
*/
@Test
public void testPW() throws Exception{
//PrintWriter(File file)
File file = new File("pw.txt");
PrintWriter pw = new PrintWriter(file);
//PrintWriter(OutputStream out,boolean antuflush)
FileOutputStream fos = new FileOutputStream(file);
PrintWriter pw2 = new PrintWriter(fos);
PrintWriter pw3 = new PrintWriter(fos,true);
//PrintWriter(Writer writer,boolean antuoflush)
OutputStreamWriter osw = new OutputStreamWriter(fos);
PrintWriter pw4 = new PrintWriter(osw);
PrintWriter pw5 = new PrintWriter(osw,true);
//PrintWriter(String fileName)
PrintWriter pw6 = new PrintWriter("pw.txt");
}
分析:众多构造方法中最常用的方式是PrintWriter(Writer writer,boolean antuoflush)第一个参数是字符流的父类,第二个参数就是自动行刷新标识了。
2、缓冲字符流print方法
PrintWriter具有丰富的pint方法,而println方法输出字符串后会自动的flush,即清空缓冲区,将数据强制写出。
常用方法有:
void print(int i);
void print(char c);
void print(boolean b);
void print(char[] c);
void print(double d);
void print(float f);
void print(long l);
void print(String str);
分析:PrintWriter的print方法能够写出所有基本数据。
3、运用PrintWriter向文件中写出数据
示例代码如下:
@Test
public void testPWIO() throws Exception{
FileOutputStream fos = new FileOutputStream("pw.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8"); PrintWriter pw = new PrintWriter(osw,true);
pw.println("HelloWorld");
pw.close();
}
4、缓冲字符输入流BufferedReader
BufferedReader是缓冲字符输入流,其内部维护一个缓冲区,可以提高读取效率。
构造方法如下:
BufferedReader(Reader reader)
示例代码如下:
/*
*构造方法 BufferedReader(Reader reader)
*/
@Test
public void testBRContructor() throws Exception{
FileInputStream fis = new FileInputStream("pw.txt");
InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
//构造方法
BufferedReader(Reader reader)
BufferedReader br = new BufferedReader(isr);
}
5、使用BufferedReader的核心方法读取文件
BufferedReader提供了一个便于读取一行字符串的方法:String readerLine()
该方法可以连续读取一行字符串,直到读取到换行符为止,返回的字符串不包含该换行符。
示例代码片段如下:
/*
* String readLine()
* 该方法可以连续读取一行字符串,直到读取到换行符为止,返回的字符串不包含该换行符。
*/
@Test
public void testBRReadLine() throws Exception{
FileInputStream fis = new FileInputStream("pw.txt");
InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); BufferedReader br = new BufferedReader(isr);
String end = null;
while((end=br.readLine())!=null){
System.out.println(end);
}
}
6、使用缓冲字符流复制文件Demo
示例代码如下:
/*
* 使用缓冲字符流赋值文件
*/
@Test
public void copy(){
//读取文件
FileInputStream fis = null;
InputStreamReader isr = null;
BufferedReader br = null;
//复制文件
FileOutputStream fos = null;
OutputStreamWriter osw = null;
PrintWriter pw = null;
try {
fis = new FileInputStream("speech.txt");
isr = new InputStreamReader(fis,"UTF-8");
br = new BufferedReader(isr);
fos = new FileOutputStream("speech_copy.txt");
osw = new OutputStreamWriter(fos,"UTF-8");
pw = new PrintWriter(osw);
String end = null;
while((end = br.readLine())!=null){
pw.println(end);
}
} catch (FileNotFoundException e) {
System.out.println("文件没有找到");
} catch (UnsupportedEncodingException e){
System.out.println("不支持指定字符集");
} catch (IOException e){
System.out.println("读写文件出现问题");
} finally {
if(br != null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(pw != null){
pw.close();
}
}
注意:大家可以把小编的代码拷贝下来进行测试,测试前需要创建要拷贝的文件,如示例中speech.txt