A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fanshuai 中级黑马   /  2015-2-20 01:03  /  1055 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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();

}

}


评分

参与人数 1技术分 +1 收起 理由
万合天宜 + 1 很给力!

查看全部评分

2 个回复

倒序浏览
视频的写法没有多大问题。单独一个'\n'可以作为换行,在*nix操作系统中就是这样,所以视频中的写法更具可移植性。单独'\r'被吃掉的情况理论上确实存在,不过实际中应该不会出现。因为'\r'表示回到行首,如果后面不接'\n',那么原先的行首字符就会被覆盖。既然要覆盖,那之前的字符岂不是多此一举,几乎不会有人做这样自相矛盾的事吧?

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 fanshuai 于 2015-3-30 21:45 编辑
fantacyleo 发表于 2015-2-20 02:01
视频的写法没有多大问题。单独一个'\n'可以作为换行,在*nix操作系统中就是这样,所以视频中的写法更具可移 ...

嗯............
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马