黑马程序员技术交流社区

标题: 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