zoukankan      html  css  js  c++  java
  • AJPFX总结I/O流操作(二)

    FileWriter:该类没有特有的方法只有自己的构造函数。该类特点在于
    1,用于处理文本文件。
    2,该类中有默认的编码表,
    3,该类中有临时缓冲。
    构造函数:在写入流对象初始化时,必须要有一个存储数据的目的地。
    另一个小细节:
    当指定绝对路径时,定义目录分隔符有两种方式:
    1,反斜线但是一定要写两个。\new FileWriter("c:\demo.txt");
    2,斜线/  写一个即可。new FileWriter("c:/demo.txt");
    一个读取文本文件的经典例子:

    [java] view plaincopyprint?


    • <span style="color:#000000;">FileReader fr = null;  
    • try  
    • {  
    • fr = new FileReader("demo.txt");  
    • char[] buf = new char[1024];//该长度通常都是1024的整数倍。  
    • int len = 0;  
    • while((len=fr.read(buf))!=-1)  
    • {  
    • System.out.println(new String(buf,0,len));  
    • }  
    • }  
    • catch(IOException e)  
    • {  
    • System.out.println(e.toString());  
    • }  
    • </span>  



    字符流的缓冲区:缓冲区的出现提高了对流的操作效率。
    原理:其实就是将数组进行封装。
    对应的对象:
    BufferedWriter:特有方法:newLine():跨平台的换行符。
    BufferedReader:特有方法:readLine():一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回。当读到末尾时,返回null。
    代码上的体现:
    写入缓冲区对象。
    //建立缓冲区对象必须把流对象作为参数传递给缓冲区的构造函数。
    BufferedWriter bufw = new BufferedWriter(new FileWriter("buf.txt"));
    bufw.write("abce");//将数据写入到了缓冲区。
    bufw.flush();//对缓冲区的数据进行刷新。将数据刷到目的地中。
    bufw.close();//关闭缓冲区,其实关闭的是被包装在内部的流对象。
    读取缓冲区对象。
    BufferedReader bufr = new BufferedReader(new FileReader("buf.txt"));
    String line = null;
    //按照行的形式取出数据。取出的每一个行数据不包含回车符。
    while((line=bufr.readLine())!=null){
    System.out.println(line);
    }
    bufr.close();
    readLine():方法的原理:
    其实缓冲区中的该方法,用的还是与缓冲区关联的流对象的read方法。只不过,每一次读到一个字符,先不进行具体操作,先进行临时存储。当读取到回车标记时,将临时容器中存储的数据一次性返回。
    既然明确了原理,我们也可以实现一个类似功能的方法。

    [java] view plaincopyprint?


    • class MyBufferedReader  
    • {  
    • private Reader r;  
    • MyBufferedReader(Reader r)  
    • {  
    • this.r = r;  
    • }  
    • public String myReadLine()throws IOException  
    • {//1,创建临时容器。  
    • StringBuilder sb = new StringBuilder();  
    • //2,循环的使用read方法不断读取字符。  
    • int ch = 0;  
    • while((ch=r.read())!=-1)  
    • {  
    • if(ch==' ')  
    • continue;  
    • if(ch==' ')  
    • return sb.toString();  
    • else  
    • sb.append((char)ch);  
    • }  
    • if(sb.length()!=0)  
    • return sb.toString();  
    • return null;  
    • }  
    • public void myClose()throws IOException  
    • {  
    • r.close();  
    • }  
    • }  



    然后说一下字节流:
    抽象基类:InputStream,OutputStream。
    字节流可以操作任何数据。
    注意:字符流使用的数组是字符数组。char [] chs字节流使用的数组是字节数组。byte [] bt
    FileOutputStream fos = new FileOutputStream("a.txt");
    fos.write("abcde");//直接将数据写入到了目的地。
    fos.close();//只关闭资源。
    FileInputStream fis = new FileInputStream("a.txt");
    //fis.available();//获取关联的文件的字节数。
    //如果文件体积不是很大。
    //可以这样操作。
    byte[] buf = new byte[fis.available()];//创建一个刚刚好的缓冲区。
    //但是这有一个弊端,就是文件过大,大小超出jvm的内容空间时,会内存溢出。
         fis.read(buf);
    转换流:
    特点:
    1,是字节流和字符流之间的桥梁。
    2,该流对象中可以对读取到的字节数据进行指定编码表的编码转换。
    什么时候使用呢?
    1,当字节和字符之间有转换动作时。
    2,流操作的数据需要进行编码表的指定时。
    具体的对象体现:
    1,InputStreamReader:字节到字符的桥梁。
    2,OutputStreamWriter:字符到字节的桥梁。
    这两个流对象是字符流体系中的成员。
    那么它们有转换作用,而本身又是字符流。所以在构造的时候,需要传入字节流对象进

  • 相关阅读:
    每天进步一点点------基础实验_08_触发器 :D、T触发器各一
    每天进步一点点------基础实验_07_锁存器 :锁存器器及透明锁存器各一
    每天进步一点点------基础实验_06_优先译码器 :优先译码器
    每天进步一点点------基础实验_05_译码器 :3位输入8位输出译码器
    每天进步一点点------基础实验_04_优先编码器:8位输入3位输出高位优先
    每天进步一点点------基础实验_03_编码器 :8位输入3位输出编码器
    每天进步一点点------基础实验_02_多路解复用器 :4通道8位带三态输出
    每天进步一点点------基础实验_01_多路复用器 :4通道8位带三态输出
    每天进步一点点------时序分析基础与时钟约束实例(三)
    每天进步一点点------时序分析基础与时钟约束实例(二)
  • 原文地址:https://www.cnblogs.com/AJPFX/p/10876033.html
Copyright © 2011-2022 走看看