黑马程序员技术交流社区
标题:
模拟readLine方法
[打印本页]
作者:
fanshuai
时间:
2015-2-20 01:03
标题:
模拟readLine方法
本帖最后由 fanshuai 于 2015-3-30 21:45 编辑
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Writer;
import java.io.Reader;
public class Test{
public static void main(String... args) throws IOException{
//将"sfhwi\ni\rfsf\r\nuhk"写入硬盘文件
Writer w=new FileWriter("C:\\1.Java");
w.write("sfhwi\ni\rfsf\r\nuhk");
w.close();
//调用自己写的程序将"sfhwi\ni\rfsf\r\nuhk"写入另一个硬盘文件
Reader r = new FileReader("C:\\1.Java");
BufferedWriter bw=new BufferedWriter(new FileWriter("C:\\2.Java"));
MyBufferedReader br = new MyBufferedReader(r);
for(String line =null;(line=br.myReadLine())!=null;){
bw.write(line);
bw.newLine();
bw.flush();
}
br.myClose();
bw.close();
}
}
class MyBufferedReader{
private Reader r;
MyBufferedReader(Reader r){
this.r=r;
}
public String myReadLine() throws IOException{
/*
定义一个临时容器,原BufferedReader封装的是字符数组
为了方便,定义一个StringBuilder容器,因为最终还是要将数据变成字符串
*/
StringBuilder sb = new StringBuilder ();
int len = 0;
while((len = r.read())!=-1){
if(len=='\r')
continue;
if(len=='\n')
return sb.toString();
else
sb.append((char)len);
}
//防止最后一行没有换行的情况
if(sb.length()!=0)
return sb.toString();
else
return null;
}
public void myClose() throws IOException{
r.close();
}
}
作者:
fantacyleo
时间:
2015-2-20 02:01
视频的写法没有多大问题。单独一个'\n'可以作为换行,在*nix操作系统中就是这样,所以视频中的写法更具可移植性。单独'\r'被吃掉的情况理论上确实存在,不过实际中应该不会出现。因为'\r'表示回到行首,如果后面不接'\n',那么原先的行首字符就会被覆盖。既然要覆盖,那之前的字符岂不是多此一举,几乎不会有人做这样自相矛盾的事吧?
作者:
fanshuai
时间:
2015-2-20 10:44
本帖最后由 fanshuai 于 2015-3-30 21:45 编辑
fantacyleo 发表于 2015-2-20 02:01
视频的写法没有多大问题。单独一个'\n'可以作为换行,在*nix操作系统中就是这样,所以视频中的写法更具可移 ...
嗯............
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2