• System.in


    import java.io.*;

    public class IOStreamDemo {

    public void samples() throws IOException {

    //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包在最外层。

  • 相关阅读:
    一个可以用的Lua的Class函数
    写一个可以用的Lua打印Table的函数
    关于C#的接口的碎碎念
    C#中接口是值类型还是引用类型?
    Effective C++笔记_条款31将文件间的编译依存关系降至最低
    Effective C++ 阅读笔记_条款27 尽量少做转型动作
    Flask--开发全套
    python之元类
    Django之模板层
    go打开文件
  • 原文地址:https://www.cnblogs.com/qingblog/p/2596958.html
Copyright © 2020-2023  润新知