黑马程序员技术交流社区
标题:
BufferedWriter写文件遇到的一个问题
[打印本页]
作者:
杨永胜
时间:
2012-12-4 15:56
标题:
BufferedWriter写文件遇到的一个问题
本帖最后由 杨永胜 于 2012-12-5 12:15 编辑
while((line=bufr.readLine())!=null)
{
bufw.write(line);
bufw.newLine();
bufw.flush();
}
使用BufferedReader读取文件,使用BufferedWriter写文件,上面的代码遇到一个问题是,原文件最后一行没有换行,写进去的时候怎么让它也不写进去换行?诸位帮忙下~~~~
作者:
睡中忘了的睡
时间:
2012-12-4 16:36
本帖最后由 睡中忘了的睡 于 2012-12-4 16:38 编辑
{:soso_e127:}要求这么严格啊!!
作者:
冯盼
时间:
2012-12-4 16:50
能力有限,只能想到这个笨方法,希望对你有点帮助:
int count = 0;
while ((line = bufr.readLine()) != null)
{
count++;
if (count > 1)
{
bufw.newLine();
}
bufw.write(line);
bufw.flush();
}
作者:
赵保磊
时间:
2012-12-4 16:51
建议看下毕老师 readLine()方法原理,BufferedReader类中的readline()方法之所以会换行,是因为底层调用的还是Reader来的read()方法,
然后read方法如果读取到\r会继续continue,如果读取到\t则会返回数组,最后一行之所以不会换行是因为最后一行没有Enter ,也就是没有读取到\r\t
附上自己定义的BufferedReadr类的readline()方法代码:
import java.io.*;
class myBufferdeReader extends Reader //子类继承Reader要实现其抽象方法
{
private Reader r;
myBufferdeReader(Reader r)
{
this.r=r;
}
//可以一次读取一行数据的方法
public String myReadline() throws IOException
{
//定义一个临时容器,原BuffferdeReader封装的是字符数组
//最终还是要将数据变成字符串返回
StringBuilder sb=new StringBuilder();
int ch=0;
while((ch=r.read())!=-1)
{
if(ch=='\r')
continue;
if(ch=='\n')
return sb.toString();
else
sb.append((char)ch);
}
if(sb.length()!=0)//循环结束后,如果缓冲区数据长度不为零,返回缓存区内容
return sb.toString();
return null;
}
public void myClose()throws IOException
{
r.close();
}
public void close()
{
r.close();
}
public int read(char[] cbuf,int off,int len)
{
return r.read(cbuf,off,len);
}
}
class myBufferedReaderDemo
{
public static void main(String[] args) throws IOException
{
Reader fr=new FileReader("Person.java");
myBufferdeReader mybuf=new myBufferdeReader(fr);
String len=null;
while((len=mybuf.myReadline())!=null)
{
System.out.println(len);
}
mybuf.myClose();
}
}
作者:
杨永胜
时间:
2012-12-4 20:29
个人解决方案是选择使用BufferedInputStream BufferedOutputStream ,感觉流的操作更方便点
作者:
杨永胜
时间:
2012-12-5 12:16
上面重写的方法不错
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2