Java基礎——iO(一),java基礎io

來源:互聯網
上載者:User

Java基礎——iO(一),java基礎io

此文為瞭解IO知識的基礎篇,這塊我看了幾天,感覺和前段時間學習集合一樣,零散又重要。想記錄一下這塊由淺入深的學習過程。所以,接下來會記錄幾篇學習筆記,之後會有以前深入總結。因為這塊比較重要啊,所以一定要學好。

一、IO的概述

IO: (Input Output)

--- 什麼是流:

一組有順序的、有起點和終點的資料集合,如檔案流、網路流

--- 流與檔案的區別:

檔案是資料的靜態儲存方法。流是資料在傳輸時的一種形態。

java 對資料的操作都是通過流的方式,java 用於操作流的對象都在IO包中。

流按操作資料分為:

位元組流(InputStream、OutputStream) 和 字元流(Reader、Writer)

其他所有的IO操作的類都是有它 們派生出來的

凡是屬於位元組流的 都是以 InputStream ,  OutputStream 為結尾,比如  FileInputStream, FileOutputStream 等

凡是屬於字元流的,都是以   Reader  , Writer 為結尾 比如  FileReader, PrintWriter 等

流按流向分為:

輸入資料流和輸出資料流

 

二、字元流 Writer

字元流的結構(只以輸出資料流為例)

Writer -- BufferedWriter

CharArrayWriter

OutputStreamWriter --FileWriter

FilterWriter  //過濾流

PipedWriter   //管道流

StringWriter

//例一 建立一個檔案,寫入一些內容   static void test() throws IOException{    Writer wr=new FileWriter("c:/1.txt");  //把原來的內容覆蓋了    wr.write("這是一行文本");    wr.write("\r\n"); //寫入分行符號    wr.write("這是第二行文本"); //寫到緩衝區中了    wr.flush(); //重新整理緩衝區    wr.close(); //流使用完,一定要關閉    }                    //FileWriter(String fileName, boolean append)          static void test2()throws IOException{    Writer wr=new FileWriter("c:/1.txt",true);  //可以給第二個參數傳true,表示以追回的方式寫入    wr.write("這是追加方式寫入的內容");    //wr.flush(); 有下面的close,這裡不flush也可以           wr.close();    }

三、標準的IO異常處理

程式碼範例:

import java.io.FileWriter;import java.io.IOException;import java.io.Writer;import java.util.ArrayList;import java.util.List;//把一份名單寫入檔案class Test16 {    public static void main(String[] args) {        List<String> nameList = new ArrayList<String>();        nameList.add("PHP");        nameList.add("Java");        nameList.add("C#");        nameList.add("C++");        Writer wr = null;        try {            wr = new FileWriter("名單.exe");            for (String name : nameList) {                wr.write(name + "\r\n");            }        } catch (Exception ex) {            throw new RuntimeException(ex);        } finally {            try {                if (wr != null) {                    wr.close();                }            } catch (IOException ex) {                throw new RuntimeException(ex);            }        }    }}// 關鍵點,要在finally 中關閉資源,關閉的時候,不要忘了判斷這個資源是不是null

四、字元流 Reader

//例子,從檔案中讀取資料

int read() 讀取單個字元 //返回的是這個字元的編碼值

int read(char[] cbuf) 將字元讀入數組 //傳回值是讀到的字元個數,如果讀到了末尾,返回-1(-1這個性質經常用到)

int read(char[] cbuf, int off, int len)  將字元讀入數組的某一部分。

//從檔案讀取資料 (本例是一個字元一個字元的方式讀的)static void test4() throws IOException {    Reader  r=new FileReader("C:/名單.txt");    int ch=0;    while(( ch=r.read()) !=-1 ){        System.out.println((char)ch);        }            }
//從檔案讀取資料 ,做為了一個符串列印出來   static void test5() throws IOException {    Reader  r=new FileReader("C:/1.txt");    char [] buff=new char[1024];    int count=r.read(buff);    String str=new String(buff,0,count);    System.out.println(str);    r.close();    }  
//例子 檔案複製 ,把C盤上的某個檔案複製到E盤
//這樣的複製是將字元一個一個的複製,很顯然,它的效率比較低!
Reader r=new FileReader("E:\\FristOne\\src\\MyProject.java");//注意:路徑的反斜線要用轉義 Writer w=new FileWriter("E:\\desc.txt"); int ch=0; while( (ch= r.read())!=-1 ){ w.write(ch); } r.close(); w.close()

既然,有一個一個的複製,我們會想,怎麼樣才能讓複製的效率變得更加高效呢?

我們可以定義一個容器,用它去塊一塊的去複製,效率就會更高了。下面是圖形說明:

 程式碼範例:

Reader r=new FileReader("E:\\FristOne\\src\\MyProject.java");    Writer w=new FileWriter("E:\\desc.txt");    char [] buff=new char[1024];//定義一個容器    //定義容器之後,會發生一些情況,比如取了幾次以後,剩下部分的容量少於定義的容器的容量,這時候讓它再去一次勢必會有空餘的空間被佔位。這不是我們想要的,所以就引出下面這個含參的取法。        int len=0;         while( (len= r.read(buff))!=-1 ){        w.write(buff,0,len);    }    r.close();    w.close();

關於IO的知識確實蠻多的,下篇待續咯......

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.