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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何超 中级黑马   /  2013-11-26 22:29  /  1199 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何超 于 2013-11-26 23:40 编辑
  1. 普通的读取
复制代码
  1. 缓冲区方式
复制代码
为什么第一个可以自动换行  而第二个不行?


评分

参与人数 1黑马币 +5 收起 理由
枫儿 + 5 神马都是浮云

查看全部评分

5 个回复

倒序浏览
第一个的代码
import java.io.*;
class         M
{
        public static void main(String[] args) throws IOException
        {
                FileReader fr=new FileReader("A.java");
                FileWriter fw=new FileWriter("Dream.txt");
                int num=0;
                while((num=fr.read())!=-1)
                {
                        fw.write((char)num);
                        fw.flush();
                }
        }
                       
       
}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
第二个的代码

import java.io.*;
class         M
{
        public static void main(String[] args) throws IOException
        {
                BufferedWriter bw=new BufferedWriter(new FileWriter("Dream.txt"));
                BufferedReader br=new BufferedReader(new FileReader("A.java"));
       
                String str=null;
                while((str=br.readLine())!=null)
                {
                        bw.write(str);
                }
        }
                       
       
}
回复 使用道具 举报
不知道是论坛搬家导致的问题还是我自己电脑问题····怎么总是不能发帖 发帖就卡死人 回复也卡···
回复 使用道具 举报
因为第二个中的readLine是读取\r\n前的数据,没有包含回车符和换行符,若想让其换行,你可以在while里面加入bw.newLine();
回复 使用道具 举报
  1. class MyBufferedReader
  2. {
  3.         private FileReader fr = null;
  4.         MyBufferedReader(FileReader fr)
  5.         {
  6.                 this.fr = fr;
  7.         }

  8.         public String myReaderLine()
  9.         {
  10.                 StringBuilder sb = new StringBuilder();
  11.                 int ch = 0;
  12.                 while((ch=fr.read())!=-1)
  13.                 {
  14.                         if(ch=='\r')
  15.                                 continue;
  16.                         if(ch=='\n')
  17.                                 return sb.toString();
  18.                         else
  19.                         sb.append((char)ch);
  20.                 }
  21.         }
  22.         public void close()
  23.         {
  24.                 fr.close();
  25.         }
  26. }
复制代码
给你看看BufferedReader的readLine()的方法是怎么实现的,你就懂了
内部还是用的是普通的read()
正如楼上所说
readLine()的内部实现是read(),read()每一个字符都读到,并存入一个字符串缓冲容器StringBuilder中,包括换行符\r\n,但是呢,在readLine()的内部,会判断读到的字符是否是\r或\n(两者必须连着出现)
如果是,就舍弃并返回读到的StringBuilder
FileReader的read()方法本身不会区分换行符\r\n,所以,读到了换行符\r\n,也就解析成换行

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1 很给力!

查看全部评分

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