1. 程式人生 > >Java知識--IO流操作(一)

Java知識--IO流操作(一)

引導關注

導語

 Java中IO流體系是很重要的基礎,我相信一開始接觸Java,很多人最頭疼的就是這些了,搞不清時,真的會把自己繞進去。在程式中所有資料的傳輸又都是以流的方式進行的,為了能搞清楚這部分的知識,有必要重新整理一下Java基礎,為以後的程式設計打下良好的基礎。

1、什麼是IO流?

IO指的是Input/Output,IO流:輸入輸出流。 我們稱為資料流。
在Java程式中,對於資料的輸入 / 輸出操作都是以流的方式進行的。
JDK中提供了各種各樣的流類,用以獲取不同種類的資料。
常見的2種IO流分類:
1.按流向分: 
輸入流:程式可以從中讀取資料的流 
輸出流:程式能向其中寫入資料的流 
2. 按資料傳輸單位分: 
位元組流:以位元組為單位傳輸資料的流 
字元流:以字元為單位傳輸資料的流 
為了能更好的瞭解Java中的IO流,下面用一張圖來說明:

2、IO流的基類和分類

下面用一張表格詳細講解IO流的分類:

以上流都是繼承四個抽象基類:
位元組輸入流:InputStream           字元輸入流:Reader
位元組輸出流:OutputStream        字元輸出流:Writer
為了更好的學習Java流體系,下面主要先從四個抽象基類開始分析。
3InputStream和OutputSteam
InputStream 位元組輸入流:繼承自InputStream的流都是用於向程式中輸入資料的。
OutputStream 位元組輸出流 :繼承自OutputStream的流是程式用於向外輸出資料的。
下面舉個例子來說,繼承自這兩個流的檔案位元組操作流FileInputStream和FileOutputStream的使用。
例子:現在有個需求是要將一份音樂檔案從e:\src複製到e:\dest。

public static void main(String[] args) {
String srcPath = "E:\\src\\media.mp4";
String destDir = "E:\\dest";
File destDirFile = new File(destDir);
if (!destDirFile.exists()) {
destDirFile.mkdir();
}
FileInputStream fInputStream = null;
FileOutputStream fOutputStream = null;
//從Src讀:輸入流
//寫入dest:輸出流
//資料型別:視訊,只能用位元組流
try { fInputStream = new FileInputStream(srcPath); fOutputStream = new FileOutputStream(destDirFile.getAbsolutePath()+File.separator+"cp_media.mp4"); //迴圈通過輸入流,讀取資料,邊讀邊寫 byte[] buff = new byte[100]; int len=-1; while ((len=in.read(buff,0,buff.length))!=-1) { //返回值:是真實讀取到的位元組數,如果到了流的末尾,返回-1 //通過輸出流寫出 fOutputStream.write(buff,0,len);//推薦使用這個方法,讀到多少位元組就寫入多少位元組 } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ try { if (fInputStream != null) { fInputStream.close(); } if (fOutputStream != null) { fOutputStream.close(); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }}}

4、Reader 和Writer

Reader 字元輸入流,繼承自Reader的流都是用於向程式中輸入資料的。
Writer  字元輸出流,繼承Writer的流都是向程式中輸出的。
下面同樣舉個例子來說,繼承自這兩個流的檔案字元操作流FileWriter和FileReader的使用。
例子:用FileWriter和FileReader完成檔案的複製[把D盤中的Stream.txt複製到C盤的根目錄下]

public static void main(String[] args) {
        File filesrc=new File("D:\\iotest2\\Stream.txt");
        File filedest=new File("C:\\"+"copy.txt");  
        try {
            Reader in=new FileReader(filesrc);      
            Writer out=new FileWriter(filedest);
            char[]cs=new char[1024];
            int len=-1;//實際的位置
            while((len=in.read(cs,0,cs.length))!=-1){
                out.write(cs,0,len);
            }
            out.close();
            in.close();
        }  catch (IOException e) {      
            e.printStackTrace();
        }
    }

5、總結

今天主要是介紹了Java基礎中很重要的IO流,主要講了IO流的作用和分類。由於這塊內容比較多,一篇文章講完篇幅比較長,所以最重要的快取流和轉換流以及如何選擇用哪些流來操作就明天繼續更新了,歡迎大家繼續關注本公眾號的技術博文。