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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马任雪刚 于 2012-5-25 17:15 编辑

//需求:将键盘录入信息输入到文件或者是控制台上。
import java.io.*;
public class PrintWriterTest
{

public static void main(String[] args) throws IOException
{
  BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));//为什么这儿必须要用InputStreamReader,
                                                                                                                            //而不能用FileReaderr呢???
  PrintWriter pw = new PrintWriter(new FileWriter("nn.txt"),true);
  String line = null;
  while((line=bw.readLine())!=null)
  {
   if("over".equals(line))
   break;
   pw.println(line.toUpperCase());
  }
  bw.close();
  pw.close();
  
  
}
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 niceBoy 于 2012-5-25 15:12 编辑

System的in定义为
public static final InputStream in是字节流
BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));
BufferedReader是字符流缓冲区,
[size=+2]构造方法摘要
BufferedReader(Reader in)
          创建一个使用默认大小输入缓冲区的缓冲字符输入流。
BufferedReader(Reader in, int sz)
          创建一个使用指定大小输入缓冲区的缓冲字符输入流。
所以需要转换流InputStreamReader

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
查查API,因为System.in返回的类型是static InputStream,字节流inputStream和Reader字符流之间的转换要用到 InputStreamReader。所以new BufferedReader(new InputStreamReader(System.in));

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报

BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));//在语法上这里确实可以把“InputStreamReader(System.in)”换成"FileReader"
但是在这里为什么没这么做呢,因为要知道流的源设备有:键盘,硬盘,内存。如果你的源设备是硬盘的话,那么完全可以用"FileReader",但在这个例子中
源设备为键盘,所以只能使用“InputStreamReader”。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
黑马11期李项京 发表于 2012-5-25 15:42
查查API,因为System.in返回的类型是static InputStream,字节流inputStream和Reader字符流之间的转换要用 ...

明白了,谢谢!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马