Java流与文件

来源:互联网 发布:音乐演奏软件 编辑:程序博客网 时间:2024/04/19 03:40
    Java的I/O操作不像C那么简单,内含了很多比较复杂的类。
 
    简述其继承关系如下:
    1、基本字节操作方面
    InputStream的子类: ByteArrayInputStream, StringBufferInputStream, FileInputStream, PipedInputStream, SequeceInputStream, FilterInputStream.
    OutputStream的子类: ByteArrayOutputStream, FileOutputStream, PipedOutputStream, FilterOutputStream.
 
    2、修饰器可以为I/O类添加性能。
    对于InputStream和OutputStream来说,使用FilterInputStream和FilterOutputStream的修饰器子类来修改“流”以满足特殊需要。
    FilterInputStream的子类:DataInputStream, BuffedInputStream, LineNumberInputStream, PushbackInputStream.
    FilterOutputStream的子类: DataOutputStream, PrintStream, BufferedOutputStream.
 
    3、Unicode操作方面
    其中有很多子类对应于字节操作的子类。
 
    I/O使用的例子(参考《thinking in java》),仅仅是说明这些情况下可以使用这些类,而不是说不可以使用别的类。
    1、reading input by lines,使用BufferedReader。
    如果是从文件读取输入的话,实例如下:
    BufferedReader in = new BufferedReader( new FileReader(filename));
    String s = in.readLine();
    如果是从标准输入读取的话,实例如下:
    BufferedReader in = new BufferedReader(
                                new InputStreamReader(System.in));
                       //System.in 是一个InputStream,而BufferedReader需要的是
                       //一个Reader对象,所以需要用InputStreamReader来转换。
    String s = in.readLine();
 
    2、input from memory,使用StringReader。
    假设s是一个String的实例,则以下代码从s中每次读取一个字符:
    StringReader in = new StringReader(s);
    int c;
    while( (c = in.read()) != -1)
       ...
 
    3、formatted memory input,使用DataInputStream。
    由于以byte类型作为示例,所以还用到了ByteArrayInputStream。
    该示例抛出异常。
    假设s为String的实例。
    try{
       DataInputStream in = new DataInputStream(
                                  new ByteArrayInputStream(s.getBytes()));
                                  //这个例子用来从Byte Array中读取基本类型的数据
       while(true)
          System.out.println((char)in.readByte());//由于read返回int型值,
                                                  //所以需要进行char的类型转换
    }catch (IOException e)
    {
        System.out.println("end");
    }
 
    4、file output,用PrintWriter输出可读的数据到文件中。该类抛出异常。
    PrintWreter out = new PrintWriter(
                 new BufferedWriter( new FileWriter(filename)) );
    具备println方法: out.println(...);
 
    5、storing and recovering data,该实例并不是为了让人们可读数据,而是为了在一个文本中暂存数据,之后将数据读出。就是说,该实例是面向机器可读的。使用了DataInputStream和DataOutputStream。
    该实例抛出异常。
    首先向一个文本写入机器可读的数据:
    DataOutputStream out = new DataOutputStream(
                  new BufferedOutputStream(
                  new FileOutputStream(filename)));
    out.writeDouble(...);
    out.writeUTF(...);
    ...
    out.close();
    之后从这个文本中读取数据:
    DataInputStream in = new DataInputStream(
               new BufferdInputStream(
               new FileInputStream(filename)));
    Double d = in.readDouble();
    ... = in.readUTF();
    ...
    in.close();
   
原创粉丝点击