Java流与文件

    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();
   
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值