JAVA學習分享Input Output

IO(Input  Output)

IO流用來處理設備之間的數據傳輸

Java對數據的操作是通過流的方式

Java用於操作流的對象都在IO包中

流按操作數據分爲兩種:字節流與字符流。 

流按流向分爲:輸入流,輸出流。

IO流常用基類

字節流的抽象基類:

InputStream OutputStream

字符流的抽象基類:

Reader Writer

注:由這四個類派生出來的子類名稱都是以其父類名作爲子類名的後綴。

InputStream的子類FileInputStream)

Reader的子類FileReader。)

IO程序的書寫

導入IO包中的類

進行IO異常處理

finally中對流進行關閉

字符流——創建文件

創建流對象,建立數據存放文件

FileWriter fw = new FileWriter(“Test.txt”);

調用流對象的寫入方法,將數據寫入流

fw.write(“text”);

關閉流資源,並將流中的數據清空到文件中。

fw.close();

完整代碼

FileWriter fw = null;

              try{

                     fw= new FileWriter("Test.txt");

                     fw.write("text");

              }

              catch(IOException e){

                     System.out.println(e.toString());

              }

              finally{

                     If(fw!=null)

 

                     try{

                                                                                    fw.close();

                     }

                     catch(IOException e){

                            System.out.println(e.toString());

 

                     }                  

              }

字符流——讀取文件

建立一個流對象,將已存在的一個文件加載進流。

FileReader fr = new FileReader(“Test.txt”);

創建一個臨時存放數據的數組。

char[] ch = new char[1024];

調用流對象的讀取方法將流中的數據讀入到數組中。

fr.read(ch);

完整代碼

FileReader fr = null;

       try{

              fr= new FileReader("c:\\test.txt");

              char[]buf = new char[1024];

              intlen= 0;

              while((len=fr.read(buf))!=-1){

                     System.out.println(newString(buf,0,len));

              }

       }

       catch(IOException e){

              System.out.println("read-Exception:"+e.toString());

       }

       finally{

              if(fr!=null){

                     try{

                            fr.close();

                     }

                     catch(IOException e){

                            System.out.println("close-Exception:"+e.toString());

                     }

              }

       }

字符流的緩衝區

緩衝區的出現提高了對數據的讀寫效率。

對應類

BufferedWriter

BufferedReader

緩衝區要結合流纔可以使用。

在流的基礎上對流的功能進行了增強。

裝飾設計模式

對原有類進行了功能的改變,增強。

裝飾模式的基本格式。

它與繼承有什麼不同?

瞭解BufferedReader的原理。

字節流

基本操作與字符流類相同

但它不僅可以操作字符,還可以操作其他媒體文件

轉換流

InputStreamReader,OutputStreamWriter

轉換流的由來

字符流與字節流之間的橋樑

方便了字符流與字節流之間的操作

轉換流的應用

字節流中的數據都是字符時,轉成字符流操作更高效。

標準輸入輸出流

System類中的字段:inout

它們各代表了系統標準的輸入和輸出設備。

默認輸入設備是鍵盤,輸出設備是顯示器。

System.in的類型是InputStream.

System.out的類型是PrintStreamOutputStream的子類FilterOutputStream 的子類.

標準輸入輸出流示例

:獲取鍵盤錄入數據,然後將數據流向顯示器,那麼顯示器就是目的地。

通過System類的setInsetOut方法對默認設備進行改變。

System.setIn(new FileInputStream(1.txt));//將源改成文件1.txt

System.setOut(new FileOutputStream(2.txt));//將目的改成文件2.txt

因爲是字節流處理的是文本數據,可以轉換成字符流,操作更方便。

BfferedReader bufr =

              newBufferedReader(new InputStreamReader(System.in));

BufferedWriter bufw =

              newBufferedWriter(new OutputStreamWriter(System.out));

流的基本應用小節

流是用來處理數據的。

處理數據時,一定要先明確數據源,與數據目的地(數據匯)。

數據源可以是文件,可以是鍵盤。

數據目的地可以是文件、顯示器或者其他設備。

而流只是在幫助數據進行傳輸,並對傳輸的數據進行處理,比如過濾處理.轉換處理等。

File

用來將文件或者文件夾封裝成對象

方便對文件與文件夾的屬性信息進行操作。

File對象可以作爲參數傳遞給流的構造函數。

瞭解File類中的常用方法。

遞歸

函數自己調用自己。

注意:遞歸時一定要明確結束條件。

應用場景:

當某一功能要重複使用時。

IO包中的其他類

RandomAccessFile

隨機訪問文件,自身具備讀寫的方法。

通過skipBytes(intx),seek(int x)來達到隨機訪問。

管道流

PipedInputStreamPipedOutputStream

輸入輸出可以直接進行連接,通過結合線程使用。

IO包中的其他類

打印流

PrintWriterPrintStream

可以直接操作輸入流和文件。

序列流   

SequenceInputStream

對多個流進行合併。

操作對象

ObjectInputStreamObjectOutputStream

被操作的對象需要實現Serializable(標記接口);

操作基本數據類型

DataInputStreamDataOutputStream

操作字節數組

ByteArrayInputStreamByteArrayOutputStream

操作字符數組

CharArrayReaderCharArrayWrite

操作字符串

StringReader StringWriter

字符編碼

字符流的出現爲了方便操作字符。

更重要是的加入了編碼轉換。

通過子類轉換流來完成。

InputStreamReader

OutputStreamWriter

在兩個對象進行構造的時候可以加入字符集。

最近51CTO+IT十八掌免費大數據課程,有興趣和問題的小夥伴可以去觀看徐培成老師直播課或者視頻。


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