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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© madianguo 中级黑马   /  2012-11-15 12:31  /  1500 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 madianguo 于 2012-11-15 23:19 编辑

BufferedReader br = new BufferedReader(new(InputStreamReader("System.in"));
我想把键盘上录入的数据录入到abc.txt中,在读取中我需要把System.in转换成字符流,
我写入的是纯文本还需不需要把字符流转换成字节流了?在写入时我采取下列哪种方法呢?
方法一:BufferedWriter bw = new BufferedWriter(new(OutputStreamWriter("abc.txt")));
方法二:BufferedWriter bw = new BufferedWriter(new FileWriter("abc.txt"));

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

4 个回复

倒序浏览
可以这样分析:
你的需求:想把键盘录入的数据存储到一个文件中,为纯文本的
可以通过缓冲流BufferedReader,而用键盘输入的(System.in)为字节流,所以需要把字节流转换成字符流(InputStreamReader)
源:键盘录入( BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in)))
目标:文件(BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("abc.txt"))))
package com.heima.reflect;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Example{
    public static void main(String[] args) throws Exception{
        BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//获取一个输入流
        //获取一个输出流
        BufferedWriter bufw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("abc.txt")));
        String line=null;
        while((line=bufr.readLine())!=null){//一行一行的读
         
          bufw.write(line);//把从键盘中读取的数据写到abc.txt文件中
          bufw.newLine();//回车换行
          if("over".equalsIgnoreCase(line)){//如果遇到over则停止录入
           break;
          }
          bufw.flush();//刷新
         
         
        }
        bufw.close();//关闭输出流
        bufr.close();//关闭输入流
    }
}


评分

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

查看全部评分

回复 使用道具 举报
我写入的是纯文本还需不需要把字符流转换成字节流了?在写入时我采取下列哪种方法呢?
方法一:BufferedWriter bw = new BufferedWriter(new(OutputStreamWriter("abc.txt")));
方法二:BufferedWriter bw = new BufferedWriter(new FileWriter("abc.txt"));

写入的是纯文本,当然用的是字符流啦。毕老师视频里的需求分析,不是写的很明确吗?
1,明确源和目的。
        源:输入流。InputStream  Reader
        目的:输出流。OutputStream  Writer。
2,操作的数据是否是纯文本。
        是:字符流。
        不是:字节流。

3,当体系明确后,在明确要使用哪个具体的对象。
        通过设备来进行区分:
        源设备:内存,硬盘。键盘
        目的设备:内存,硬盘,控制台。

回复 使用道具 举报
王永荣 发表于 2012-11-15 16:36
写入的是纯文本,当然用的是字符流啦。毕老师视频里的需求分析,不是写的很明确吗?

...

我比较纳闷的是字节流是成对出现的(就是读取的时候字节流转换成字符流,在写入的时候字符流转换成字节流,保持读取和写入的一致),还是只要保证程序的要求(最后写入的是纯文本就直接以字符流的方式输出,而不用转换成字节流吗)?
回复 使用道具 举报
madianguo 发表于 2012-11-15 20:05
我比较纳闷的是字节流是成对出现的(就是读取的时候字节流转换成字符流,在写入的时候字符流转换成字节流 ...

我的理解:操作纯文本文件,转不转换流对结果是没什么影响的。。。只是从执行效率方面来说有需要。
读入时:字节流转成字符流,主要是为了读取数据方便,因为一般地,都用BufferedReader来按行读取文本文件,效率高。
输出时:选择字符流还是字节流输出,还是一般地,选用字符流的BufferedWriter高效一些。
所以,视频里总结说,是纯文本,就选用字符流。
结论老师已经给了,不要考虑那么多啦。:loveliness:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马