IO的初步理解(二)

节点流类型
类型字符流字节流
File(文件)FileReader
FileWriter
FileInputStream
FileOutputStream
Memory ArrayCharArrayReader
CharArrayWriter
ByteArrayInputStream
ByteArrayOutputStream
Memory String
StringReader
StringWriter
--
Pipe(管道)PipeReader
PipeWriter
PipedInputStream
PipedOutputStream
这里将补充一下字节流的类型,上一篇中的两个示例也是字节流的示例,包括这一篇中的两个示例一共有四个示例。这些小例子很简单,注释只是简单的写了一下。

FileWriter示例:

  public static void main(String[] args) {
    FileWriter fw = null;
    try {
      fw = new FileWriter("d:\\1.txt");//在D盘下寻找1.txt文件,如果没有则新建一个
      for(int c=0;c<=50;c++){
        fw.write(c);//将打印前50个字符
      }
      fw.close();//关闭连接
    } catch (IOException e1) {
    	e1.printStackTrace();
      System.out.println("文件写入错误");
      System.exit(-1);
    }
  }

这时打印出来的是Unicode编码的前50个编码打印到1.txt中。


FileReader示例:

public class TestFileReader {
  public static void main(String[] args) {
    FileReader fr = null; 
    int c = 0;
    try {
      fr = new FileReader("d:\\FileReader.java");
      int ln = 0;
      while ((c = fr.read()) != -1) {
        System.out.print((char)c);//强制转换成char型
      }
      fr.close();
    } catch (FileNotFoundException e) {
      System.out.println("找不到指定文件");
    } catch (IOException e) {
      System.out.println("文件读取错误");
    }

  }

这时的程序中的中文就能正常打印了。

总结:节点流是将文件中的信息直接不加以任何改变的读取或者输出出来, 字节流是将文件中的信息一个字节一个字节的读取或者是写入,这时要注意像中文等文字在编码中是占据了两个字节的位置,这时候字节流不能将文件中的一部分信息准确的读取或者写入,这时候就要采用字节流了。


处理流类型
处理类型
字符流
字节流
Buffering

BufferedReader

BufferedWriter

Bufferedlnputstream

Bufferedoutputstream
Filtering
FilterReader
FilterWriter

Fllterlnputstream

FilterOutputstream

Converting between 

bytesand character

InputStreamWriter

OutputStreamWriter

Object

Serialization

Objectlnputstream

ObjectOutputstream
Data conversion

Datalnputstream

DataOutputstream
Counting 
LineNumberReader
LineNumberInputStream
Peeking ahead
PusbackReader
PushbackInputStream
Printing
PrintWriter
PrintStream


处理流得一种-----缓冲流:

缓冲流要"套接"在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。

缓冲流BufferedInputStream示例:

  public static void main(String[] args) {
    try {
      FileInputStream fis = new FileInputStream("d:\\World.java");//以字节的方式读取文件中的内容
      BufferedInputStream bis = new BufferedInputStream(fis);//将fis放入缓冲区里
      int c = 0;
      System.out.println(bis.read());
      System.out.println(bis.read());
      bis.mark(100);//从第100个开始读
      for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
        System.out.print((char)c+" ");//如果不加强制转换将打印数字
      }
      System.out.println(); 
      bis.reset();回到第100的标记点上
      for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
        System.out.print((char)c+" ");//如果不加强制转换将打印数字
      }
      bis.close();//关闭连接
    } catch (IOException e) {e.printStackTrace();}
  }
缓冲流BufferedWriter,BufferedReader示例:

 public static void main(String[] args) {
    try {
      BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\1.txt"));//new出的FileWriter时就准备往里面写数据了,但是感觉这样直接使用不是很方便,于是在外面加上一个处理流BufferedWriter。这个加上的处理流是带缓冲区的。
      BufferedReader br = new BufferedReader(new FileReader("d:\\1.txt"));
      String s = null;
      for(int i=1;i<=100;i++){
        s = String.valueOf(Math.random());//产生一个随机数,然后把这个随机数转换为字符串
        bw.write(s);
        bw.newLine();//往文件里加入一个换行符,意义是每写一个字符串之后就加入一个换行符
      }
      bw.flush();//将缓冲的文件全部放入文件里面去
      while((s=br.readLine())!=null){//br.readLine()将一行中的内容当作字符串传递出来
        System.out.println(s);
      }
      bw.close(); 
      br.close();//关闭两个连接
    } catch (IOException e) { e.printStackTrace();}
  }


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值