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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨永胜 高级黑马   /  2012-12-4 15:56  /  1929 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨永胜 于 2012-12-5 12:15 编辑

                        while((line=bufr.readLine())!=null)
                        {
                                bufw.write(line);
                                bufw.newLine();
                                bufw.flush();
                        }
使用BufferedReader读取文件,使用BufferedWriter写文件,上面的代码遇到一个问题是,原文件最后一行没有换行,写进去的时候怎么让它也不写进去换行?诸位帮忙下~~~~

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
本帖最后由 睡中忘了的睡 于 2012-12-4 16:38 编辑

{:soso_e127:}要求这么严格啊!!
回复 使用道具 举报
能力有限,只能想到这个笨方法,希望对你有点帮助:
int count = 0;
                while ((line = bufr.readLine()) != null)
                {
                        count++;
                        if (count > 1)
                        {
                                bufw.newLine();
                        }
                        bufw.write(line);
                        bufw.flush();
                }
回复 使用道具 举报
建议看下毕老师 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();
}
}


评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
个人解决方案是选择使用BufferedInputStream  BufferedOutputStream ,感觉流的操作更方便点
回复 使用道具 举报
上面重写的方法不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马