一.Reader与Writer
Reader与Writer是Java输入输出流中的字符流,Reader负责从指定文件当中读取内容
Writer负责将指定内容写入到指定文件当中。
二.BufferedReader
BufferedReader是Reader的直接子类从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。 可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。BufferedReader与 BufferedWriter都是字符流的包装类,也是一种高级流。
构造方法:
BufferedReader(Reader in)
创建使用默认大小的输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)
创建使用指定大小的输入缓冲区的缓冲字符输入流。
方法:
void close()
关闭流并释放与之相关联的任何系统资源。
Stream lines()
返回一个 Stream ,其元素是从这个 BufferedReader读取的行。
void mark(int readAheadLimit)
标记流中的当前位置。
boolean markSupported()
告诉这个流是否支持mark()操作。
int read()
读一个字符
int read(char[] cbuf, int off, int len)
将字符读入数组的一部分。
String readLine()
读一行文字。
boolean ready()
告诉这个流是否准备好被读取。
void reset()
将流重置为最近的标记。
long skip(long n)
跳过字符
利用BufferedReader读取文件实例:
String name="D:"+File.separator+"a"+File.separator+"test.txt";
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(name),"GBK"));
int i=0;
String str=null;
while((str=bufferedReader.readLine())!=null) {
String str1=new String(str.getBytes(),"utf-8");
System.out.println(str1);
}
bufferedReader.close();
三.BufferedWriter
BufferedWriter是Writer的字节子类将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。,可以指定缓冲区大小,或者可以接受默认大小。 默认值足够大,可用于大多数用途。
构造方法:
BufferedWriter(Writer out)
创建使用默认大小的输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz)
创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区。
方法:
void close()
关闭流,先刷新。
void flush()
刷新流。
void newLine()
写一行行分隔符。
void write(char[] cbuf, int off, int len)
写入字符数组的一部分。
void write(int c)
写一个字符
void write(String s, int off, int len)
写一个字符串的一部分。
综合实例:
事先在当前目录下准备好一个 test.txt 的文本文件,要求该文本文件是使用 GBK 编码的
多行文本文件。如:
test.txt
窗前明月光
疑是地上霜
举头望明月
低头思故乡
利用字节流+桥转换读入这个文本文件,然后按照行的顺序,以 UTF-8 的编码方式,写
到 test2.txt 文件中,例:
test2.txt
低头思故乡
举头望明月
疑是地上霜
窗前明月光
String name="D:"+File.separator+"a"+File.separator+"test.txt";
String name1="D:"+File.separator+"a"+File.separator+"test2.txt";
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(name),"GBK"));
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(name1)));
String[] s=new String[4];
int i=0;
String str=null;
while((str=bufferedReader.readLine())!=null) {
String str1=new String(str.getBytes(),"utf-8");
s[i]=str1;
i++;
System.out.println(str1);
}
bufferedReader.close();
for(int j=3;j>-1;j--) {
bufferedWriter.write(s[j]);
bufferedWriter.newLine();
}
bufferedWriter.close();
}