io补充

来源:互联网 发布:gre issue 知乎 编辑:程序博客网 时间:2024/05/23 00:03
                 //1. 这是从键盘读入一行数据,返回的是一个字符串                 BufferedReader stdin =new BufferedReader(new InputStreamReader(System.in));                 System.out.print("Enter a line:");                 System.out.println(stdin.readLine());                 //2. 这是从文件中逐行读入数据                 BufferedReader in = new BufferedReader(new FileReader("IOStreamDemo.java"));                 String s, s2 = new String();                 while((s = in.readLine())!= null)                            s2 += s + "\n";                 in.close();                 //3. 这是从一个字符串中逐个读入字节                 StringReader in1 = new StringReader(s2);                 int c;                 while((c = in1.read()) != -1)                            System.out.print((char)c);                 //4. 这是将一个字符串写入文件                 try {                            BufferedReader in2 = new BufferedReader(new StringReader(s2));                            PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out")));                            int lineCount = 1;                            while((s = in2.readLine()) != null )                                       out1.println(lineCount++ + ": " + s);                            out1.close();                 } catch(EOFException e) {                            System.err.println("End of stream");                 }
对于上面的例子,需要说明的有以下几点:

1. BufferedReader是Reader的一个子类,它具有缓冲的作用,避免了频繁的从物理设备中读取信息。它有以下两个构造函数:
BufferedReader(Reader in)
BufferedReader(Reader in, int sz)
这里的sz是指定缓冲区的大小。
它的基本方法:
           void close() //关闭流
           void mark(int readAheadLimit) //标记当前位置
           boolean markSupported() //是否支持标记
           int read() //继承自Reader的基本方法
           int read(char[] cbuf, int off, int len) //继承自Reader的基本方法
           String readLine() //读取一行内容并以字符串形式返回
           boolean ready() //判断流是否已经做好读入的准备
           void reset() //重设到最近的一个标记
           long skip(long n) //跳过指定个数的字符读取

2. InputStreamReader是InputStream和Reader之间的桥梁,由于System.in是字节流,需要用它来包装之后变为字符流供给BufferedReader使用。

3. PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out")));

这句话体现了Java输入输出系统的一个特点,为了达到某个目的,需要包装好几层。首先,输出目的地是文件IODemo.out,所以最内层包装的是 FileWriter,建立一个输出文件流,接下来,我们希望这个流是缓冲的,所以用BufferedWriter来包装它以达到目的,最后,我们需要格式化输出结果,于是将PrintWriter包在最外层。
Java提供了这样一个功能,将标准的输入输出流转向,也就是说,我们可以将某个其他的流设为标准输入或输出流
原创粉丝点击