一.自定义流
1使用StringBuilder和FileReader自定义一个读取的缓冲区
自定义的读流需要继承Reader
写一个方法,在这个方法里面有遍历
先判断条件,有可能导致此方法结束,或者有肯能导致本次循环不往下执行
主要判断 \r \n
package com.it.utils;
import java.io.IOException;
import java.io.Reader;
public class MyBuffered extends Reader {
Reader reader;
public MyBuffered(Reader reader) {
super();
this.reader = reader;
}
//读行的方法
public String readLine() throws IOException {
StringBuilder sBuilder = new StringBuilder();
//使用一个读一个读的方式来完成读行
int num = 0;
while ((num=reader.read())!=-1) { //一个一个读
//在读的过程中 首先判断本行是否结束\r\n
if(num == '\r') { //如果读到的是\r 跳过 看后面是不是\n
continue;
} else if (num == '\n') { //如果后面跟的是\n 说明本行结束 返回本行
sBuilder.append("\r\n"); //换行
return sBuilder.toString();
} else { //是本行的正常字符,追加到后面
sBuilder.append((char)num);
}
//主要针对最后一行
if(sBuilder.length()!=0) { //防止本行后面没有\r\n不返回 只要有字符就返回
return sBuilder.toString();
}
}
return null;
}
@Override
public int read(char[] cbuf, int off, int len) throws IOException {
// TODO Auto-generated method stub
return 0;
}
//关流
public void close() throws IOException {
if(reader!=null) {
reader.close();
}
}
}
package com.it.test;
import java.io.FileReader;
import java.io.IOException;
import com.it.utils.MyBuffered;
public class MyBufferedTest {
public static void main(String[] args) throws IOException {
FileReader reader = new FileReader("a.txt");
MyBuffered myBuffered = new MyBuffered(reader);
String st