我自己模拟做了一个BufferedRwader里面的readLine()方法和BufferedWriter里面的newLine()方法。其实readLine()跟newLine()最终都是要一个一个字符的读取(通过read()),遇到换行符的时候,才返回一个字符串。最后执行完后,要关闭资源,也就是关闭流。下面代码中的myReaderOnline()方法是自定义读一行的方法,myNewLine()是自定义一个写一行的方法。具体的实现过程请看代码:
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 明白BufferedRwader类中特有的readLine的原理后 自定义一个类中包含一个功能跟readLine方法一致
* 我自己模拟做了一个BufferedRwader里面的readLine()方法和BufferedWriter里面的newLine()方法
* @author zcq
*
*/
public class MyBuffereReader {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
FileReader filereader = new FileReader("D:\\ReaderFile.java");//指定要读取文件的路径
FileWriter write = new FileWriter("D:\\MyBufferedDemo_1.txt");//指定要把读取的文件写到哪一个文件中
MyBufferedDemo my = new MyBufferedDemo(filereader,write);
String line = null;
while ((line = my.myReaderOnline()) != null) {
System.out.println(line);
}
String l =null;
while((l=my.myNewLine())!=null){
write.write(l, 0, l.length());
}
my.readerclose();
my.writeclose();
}
public static class MyBufferedDemo {
FileReader reader=null;
FileWriter write=null;
public MyBufferedDemo(FileReader reader,FileWriter write) {
this.reader = reader;
this.write = write;
}
/**
* 自定义读一行的方法
* @return
* @throws IOException
*/
public String myReaderOnline() throws IOException {
// 定义一个StringBuilder容器,因为最终还是要将数据变成字符串
StringBuilder builder = new StringBuilder();
int len = 0;
while ((len = reader.read()) != -1) {
if (len == '\r')
continue;
if (len == '\n')
return builder.toString();
else
builder.append((char) len);
}
if (builder.length() != 0) {
return builder.toString();
}
return null;
}
/**
* 自定义一个写一行的方法:"\r\n"就是一个换行符,用来代替读取一行
* @throws IOException
*/
public String myNewLine() throws IOException{
StringBuilder builer = new StringBuilder();
int len = 0;
while((len = reader.read())!=-1){
if(len=='\r')
continue;
if(len=='\n')
return builer.toString();
else
builer.append((char)len);
}
if(builer.length()!=0){
return builer.toString();
}
return null;
}
/**
* 关闭读取流
* @throws IOException
*/
public void readerclose() throws IOException {
reader.close();
}
/**
* 关闭写入流
* @throws IOException
*/
public void writeclose() throws IOException{
write.close();
}
}
}
以上供大家参考,如果有比较好的方法,我们可以互相交流一下。