美文网首页
java中的IO

java中的IO

作者: 谢审言_shen | 来源:发表于2016-06-04 13:47 被阅读0次

    Java中的IO

    IO流也是种对象,Java中的一切都是对象。

    IO操作的目标:从数据源中读取数据,以及将数据读写到数据目的地当中。

    IO分类
    1.输入流/输出流。
    2.字节流/字符流。
    每次读写1~n个字节或字符。
    字节流的核心类,InputStream(abstract)<----FileInputStream Int read(byte[] b, int off, int len),以字节的形式读取数据,放入byte型的数组b中。Int off,是偏移量,len为长度。
    OutPutStream(abstract)<----FileOutputStream Void write(byte[]b, int off, int len);
    *字节流读取:

    import java.io.*;
      class test{
      public static void main(String argsrgs[]){
           //声明输入,输出流引用
           FileInputStream fis = null;
           FileOutputStream fos = null;
           try{
                 //生成代表输入,输出流的对象
                 fis = new FileInputStream("e:/notpad/from.txt");
                 fos = new FileOutputStream("e:/notpad/to.txt");
                 //生成一个字节数组
                 byte [] buffer = new byte[100];
                 //read()返回值为int类型,这一次我们读取了多少字节的数据
                 //调用输入字节流的read()方法,读取数据
                 //调用输出字节流的write()方法,读取数据
                 int temp = fis.read(buffer, 0 ,buffer.length);
                 fos.write(buffer, 0 ,temp);
                 /* 按字节依次取出在屏幕上
                 for(int i = 0 ; i <= buffer.length; i++){
                      System.out.println(buffer[i]);
                 } *//* 将字节转换成字符串,存放于S中
                 String s = new String(buffer);
                 s = s.trim();
                 System.out.println(s); */
           }
           catch(Exception e){
                 e.printStackTrace();
           }
           finally{  }
      }
     }
    

    当读取大文件时:
    //生成一个字节数组
    byte [] buffer = new byte [1024];
    //read()返回值为int类型,这一次我们读取了多少字节的数据
    //调用输入字节流的read()方法,读取数据
    //调用输出字节流的write()方法,读取数据
    //读取大文件时,应循环读取,
    //当read()返回值为-1时,表示已经读完文件,利用break跳出当前循环

    while(true){
    int temp = fis.read(buffer, 0 , buffer.length);
        if(temp == -1){
            break;
            }
        fos.write(buffer, 0 ,temp);
        }
    

    finally{
            //关闭输入输出管道
            try{
                fis.close();
                fos.close();
            }
            catch(Exception e){
                e.printStackTrace();
            }
        }
    

    字符流读取大文件时:
    //字符流:读写时以字符为基础
    //字符输入流都是Reader的子类<-- FileReader
    //int read(char [] c , int off , int len)
    //字符输出流都是Writer的子类<---FileWriter
    // void writer(char [] c ,int off ,int len)
    3.节点流/处理流。
    处理流是在节点流的基础上对数据在进行加工。(eg:水管外边的加热管道)
    字节流是被装饰者,处理流BufferedReader是装饰者。

    1. 字符输入处理流BufferedReader的使用
      处理流中的方法:一次读取一行public String readLine() throws IOException
      生成BufferedReader的对象:
      BufferedReader in= new BufferedReader(new FileReader("foo.in"));

         public static void main(String args[]){
           FileReader fr = null;
          BufferedReader br = null;
          try{
                fr = newFileReader("e:/notpad/34/users.txt");
                br = new BufferedReader(fr);
                String line = null;
               //读取大文件时
                while(true){
                     line = br.readLine();
                     if(line == null){
                           break;
                     }
                     System.out.println(line);
                }
          }
      

    设计模式之装饰着模式
    接口工人worker下有两个子类水管工plumber,与木匠工carpenter。均实现接口下的doSth()方法。A公司Aworker实现接口worker,Agongs 员工(水管&木匠)说“你好,A公司员工”。。。
    //将水管工的对象作为参数传入Aworker()这个构造函数中,
    //则现在A公司现在worker这个成员变量为水管工。

     class Aworkerimplements worker{
      private worker worker;
      Aworker(worker worker){
           this.worker = worker;
      }
      public void doSth(){
           System.out.println("你好,A公司员工");
           worker.doSth();
      }
    }
    

    在test类中:

    public static void main(String args[]){
           plumber p = new plumber();
           //p向上转型为worker类型的参数,传入Aworker中。Aworker为装饰着
           Aworker A = new Aworker(p);
           A.doSth();
      }
    

    相关文章

      网友评论

          本文标题:java中的IO

          本文链接:https://www.haomeiwen.com/subject/ibpldttx.html