JAVA學習——IO操作(一)

                                               JAVA學習——IO操作(一)

一、IO初步:


JAVA程序中,對於數據的輸入與輸出操作都是以流的方式進行的,按照流的方向不同可以分爲輸入流與輸出流(這裏的輸入與輸出均是以程序爲參照),按照處理數據單位不同可以分爲字節流(直接連接數據源的流)與字符流,按照功能不同可以分爲節點流與處理流。

 

字節流

字符流

輸入流

Inputstream

Reader

輸出流

Outputstream

Writer

                   Inputstream示例:

packagecom.abin;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.IOException;

 

publicclass InputStream {

         public static void main(String[] args){

                   int byte_in = 0;

                   FileInputStream in = null;

                   try {

                            in=newFileInputStream("E:/JavaProject/IO/src/com/abin/InputStream.java");

                   } catch(FileNotFoundException e) {

                            System.out.println("找不到指定文件");

                            System.exit(-1);

                   }

                   long num = 0;

                   try {

                            while((byte_in=in.read())!=-1){

                                     System.out.print((char)byte_in);

                                     num++;

                            }

                            in.close();

                            System.out.println();

                            System.out.println("共讀取"+num+"個字節");

                           

                   } catch (IOException e) {

                            System.out.println("讀取文件錯誤");

                   }

                  

         }

 

}

 

Outputstream示例:

packagecom.abin;

 

import java.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

 

publicclass OutputStream {

         public static void main(String[] args){

                   int byte_in = 0;

                   FileInputStream in = null;

                   FileOutputStream out = null;

                   try {

                            in = newFileInputStream("E:/JavaProject/IO/src/com/abin/InputStream.java");

                   } catch(FileNotFoundException e) {

                            e.printStackTrace();

                   }

                   try {

                            out = newFileOutputStream("E:/JavaProject/InputStream.java");

                   } catch(FileNotFoundException e) {

                            // TODOAuto-generated catch block

                            e.printStackTrace();

                   }

                   try {

                            while ((byte_in =in.read())!=-1) {

                                     out.write(byte_in);

                            }

                   } catch (IOException e) {

                            System.out.println("文件複製錯誤");

                   }

                   try {

                            in.close();

                   } catch (IOException e) {

                            // TODOAuto-generated catch block

                            e.printStackTrace();

                   }

                   try {

                            out.close();

                   } catch (IOException e) {

                            // TODOAuto-generated catch block

                            e.printStackTrace();

                   }

         }

 

}

 

節點流和處理流

    按照流是否直接與特定的地方(如磁盤、內存、設備等)相連,分爲節點流和處理流兩類。

    節點流:可以從或向一個特定的地方(節點)讀寫數據。如FileReader。

處理流:是對一個已存在的流的連接和封裝,通過所封裝的流的功能調用實現數據讀寫。如BufferedReader。處理流的構造方法總是要帶一個其他的流對象做參數。一個流對象經過其他流的多次包裝,稱爲流的鏈接。

    常用的節點流:

    父 類 InputStream OutputStream Reader Writer

文 件 FileInputStream FileOutputStrean FileReader FileWriter 文件進行處理的節點流。

數 組 ByteArrayInputStream ByteArrayOutputStreamCharArrayReader CharArrayWriter 對數組進行處理的節點流(對應的不再是文件,而是內存中的一個數組)。

字符串 StringReader StringWriter 對字符串進行處理的節點流。

管 道 PipedInputStream PipedOutputStream PipedReaderPipedWriter對管道進行處

理的節點流。

常用處理流(關閉處理流使用關閉裏面的節點流)

緩衝流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter

增加緩衝功能,避免頻繁讀寫硬盤。

轉換流:InputStreamReader OutputStreamReader實現字節流和字符流之間的轉換。

數據流 DataInputStream DataOutputStream 等-提供將基礎數據類型寫入到文件中,或者讀取出來,爲什麼要有這個流呢?看這樣的分析,如果沒有這種流的話,有一個long,本身只佔8個字節,如果我要寫入到文件,需要轉成字符串,然後在轉成字符數組,那空間會佔用很多,但是有了這種流之後就很方便了,直接將這8個字節寫到文件就完了。既節約了內存空間有讓程序寫起來更加方便簡單了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章