黑马程序员技术交流社区

标题: 问什么不能用FileReaderr呢???(已解决) [打印本页]

作者: 黑马任雪刚    时间: 2012-5-25 14:55
标题: 问什么不能用FileReaderr呢???(已解决)
本帖最后由 黑马任雪刚 于 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();
  
  
}
}


作者: niceBoy    时间: 2012-5-25 14:59
本帖最后由 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
作者: 黑马11期李项京    时间: 2012-5-25 15:42
查查API,因为System.in返回的类型是static InputStream,字节流inputStream和Reader字符流之间的转换要用到 InputStreamReader。所以new BufferedReader(new InputStreamReader(System.in));
作者: 揭耀祖    时间: 2012-5-25 16:03

BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));//在语法上这里确实可以把“InputStreamReader(System.in)”换成"FileReader"
但是在这里为什么没这么做呢,因为要知道流的源设备有:键盘,硬盘,内存。如果你的源设备是硬盘的话,那么完全可以用"FileReader",但在这个例子中
源设备为键盘,所以只能使用“InputStreamReader”。
作者: 黑马任雪刚    时间: 2012-5-25 17:13
黑马11期李项京 发表于 2012-5-25 15:42
查查API,因为System.in返回的类型是static InputStream,字节流inputStream和Reader字符流之间的转换要用 ...

明白了,谢谢!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2