I/O 流的典型使用方式

来源:互联网 发布:什么软件可以看图纸 编辑:程序博客网 时间:2024/05/09 20:21
尽管我们可以通过不同的方式组合 I/O“流”类,但我们可能也就只会用到其中的几种组合。
下面的例子可以作为基本参考;它展示了典型 I/O 配置的创建和使用。注意每个配置都以
一个注释编号和标题开始,其中标题对应于随后文本内的适当说明。


//: c12:IOStreamDemo.java
// Typical I/O stream configurations.
// {RunByHand}
// {Clean: IODemo.out,Data.txt,rtest.dat}
import com.bruceeckel.simpletest.*;
import java.io.*;


public class IOStreamDemo {
    private static Test monitor = new Test();
    // Throw exceptions to console:
    public static void main(String[] args)
  throws IOException {
        // 1. Reading input by lines:
    BufferedReader in = new BufferedReader(
      new FileReader("IOStreamDemo.java"));
        String s, s2 = new String();
    while((s = in.readLine())!= null)
            s2 += s + "\n"; 
    in.close();


    // 1b. Reading standard input:
    BufferedReader stdin = new BufferedReader(
      new InputStreamReader(System.in));
    System.out.print("Enter a line:");
    System.out.println(stdin.readLine());


        // 2. Input from memory
    StringReader in2 = new StringReader(s2);
        int c; 
        while((c = in2.read()) != -1) 
      System.out.print((char)c);


    // 3. Formatted memory input
        try { 
      DataInputStream in3 = new DataInputStream(
        new ByteArrayInputStream(s2.getBytes()));
            while(true) 
        System.out.print((char)in3.readByte());
    } catch(EOFException e) {
      System.err.println("End of stream");
        } 


        // 4. File output 
        try { 
      BufferedReader in4 = new BufferedReader(
                new StringReader(s2)); 
      PrintWriter out1 = new PrintWriter(
                new BufferedWriter(new FileWriter("IODemo.out")));
      int lineCount = 1;
      while((s = in4.readLine()) != null )
        out1.println(lineCount++ + ": " + s);
            out1.close(); 
    } catch(EOFException e) {
      System.err.println("End of stream");
        } 


        // 5. Storing & recovering data 
        try { 
      DataOutputStream out2 = new DataOutputStream(
        new BufferedOutputStream(
          new FileOutputStream("Data.txt")));
      out2.writeDouble(3.14159);
      out2.writeUTF("That was pi");
      out2.writeDouble(1.41413);
            out2.writeUTF("Square root of 2"); 
            out2.close(); 
      DataInputStream in5 = new DataInputStream(
        new BufferedInputStream(
          new FileInputStream("Data.txt"))); 
            // Must use DataInputStream for data: 
      System.out.println(in5.readDouble());
            // Only readUTF() will recover the
      // Java-UTF String properly:
      System.out.println(in5.readUTF());
            // Read the following double and String:
      System.out.println(in5.readDouble());
      System.out.println(in5.readUTF());
    } catch(EOFException e) {
      throw new RuntimeException(e);
        } 


        // 6. Reading/writing random access files
    RandomAccessFile rf =
      new RandomAccessFile("rtest.dat", "rw");
        for(int i = 0; i < 10; i++)
      rf.writeDouble(i*1.414);
    rf.close();
        rf = new RandomAccessFile("rtest.dat", "rw");
    rf.seek(5*8);
    rf.writeDouble(47.0001);
    rf.close();
        rf = new RandomAccessFile("rtest.dat", "r");
        for(int i = 0; i < 10; i++)
            System.out.println("Value " + i + ": " +
        rf.readDouble());
    rf.close();
    monitor.expect("IOStreamDemo.out");
    } 
} ///:~


下面是程序中编号部分的说明。


原创粉丝点击