java學習(九) —— java中的File文件操做及IO流概述

前言

  1. 流是幹什麼的:爲了永久性的保存數據。
  2. IO流用來處理設備之間的數據傳輸(上傳和下載文件)
  3. java對數據的操做是經過流的方式。
  4. java用於操做流的對象都在IO包中。
  5. java IO系統的學習,本質上就是對文件的讀寫操做。

File類

  1. java中使用File來抽象一個文件,不管是普通文件仍是目錄,均可應對與一個File對象。
  2. File只是抽象的表明來磁盤上的某個文件或者目錄,內部其實是依賴一個平臺無關的本地文件系統類。
  3. File沒法對其所表示的文件內容進行任何讀寫操做(那是流作的事情)。
  4. 成員方法:java

    (1)建立功能:
        【1】public boolean createNewFile()
        【2】public boolean mkdir()
        【3】public boolean mkdirs()
    (2)刪除功能:public boolean delete()
    (3)重命名功能:public boolean renameTo(File dest)
    (4)判斷功能:
        【1】public boolean isDirectory()
        【2】public boolean isFile()
        【3】public boolean exists()
        【4】public boolean canRead()
        【5】public boolean canWrite()
        【6】public boolean isHidden()
    (5)獲取功能:
        【1】public String getAbsolutePath()
        【2】public String getPath()
        【3】public String getName()
        【4】public long length()
        【5】public long lastModified()
    (6)高級獲取功能:
        【1】public String[] list()
        【2】public File[] listFiles()

流的分類

  1. 根據數據流向的不一樣分爲輸入流和輸出流。
  2. 根據處理數據類型的不一樣分爲字節流和字符流:數組

    (1)字符流:顧名思義,該流只能處理字符,但處理字符速度很快。
    (2)字節流:能夠處理全部以bit爲單位存儲的文件,也就是說能夠處理全部的文件,可是在處理字符的速度上不如字符流。
  3. 字符流的抽象基類:函數

    (1)Reader:字符輸入流的抽象類,全部字符輸入流的實現都是它的子類
    (2)Writer:字符輸出流的抽象類,全部字符輸出類的實現都是它的子類
  4. 字節流的抽象基類:學習

    (1)InputStream:字節輸入流的抽象類,是全部字節輸入流的父類
    (2)OutputStream:字節輸出流的抽象類,是輸出字節流的全部類的超類
  5. 字符流Reader派生的子類:優化

    (1)CharArrayReader
    (2)BufferedReader/LineNumberReader
    (3)FilterReader
    (4)InputStreamReader/FileReader
  6. 字符流Writer派生的子類:編碼

    (1)BufferedWriter
    (2)CharArrayWriter
    (3)FilterWriter
    (4)OutputStreamWriter/FileWriter
    (5)PrintWriter
    (6)StringWriter
  7. 字節流InputStream派生的子類code

    (1)FileInputStream
    (2)ObjectInputStream
    (3)FilterInputStream/BufferedInputStream/DataInputStream/PushbackInputStream
    (4)SequenceInputStream
    (5)ByteArrayInputStream
    (6)StringBufferInputStream)
  8. 字節流OutputStream派生的類:對象

    (1)ByteArrayOutputStream
    (2)FileOutputStream
    (3)FilterOutputStream/BufferedOutputStream/DataOutputStream
    (4)ObjectOutputStream

優化讀寫:字節緩衝流

  1. 字節流一次讀寫一個數組的速度明顯比一次讀寫一個字節的速度快不少。這是加入了數組這樣的緩衝區效果。
  2. 文件字節輸入流的讀取時,是直接同字節流中讀取的。
  3. 因爲字節流是與硬件(存儲介質)進行的讀取,因此速度較慢。
  4. 而cpu須要使用數據時經過read()、read(byte[])讀取數據時就要受到硬件IO的慢速度限制。
  5. cpu與內存發生的讀寫速度比硬件IO快10倍不止,那麼就能夠在內存創建緩衝區優化。
  6. 優化讀寫的思路:內存

    (1)在內存中創建緩衝區
    (2)先把存儲介質中的字節讀取到緩衝區
    (3)cpu須要數據時直接從緩衝區讀取
    (4)緩衝區要足夠大,在被讀完後又觸發fill()函數自動從存儲介質的文件字節內容中讀取字節存儲到緩衝區數組。

轉換流

  1. 轉換流是字節流通向字符流的橋樑,能夠將字節流轉換爲字符流。
  2. 原理就是在字節流的基礎上增長了編解碼的操做。
  3. 字符流 = 字節流 + 編碼表
  4. FileReader、FileWriter其實底層都是字節流,只不過額外的配置一個編碼器、解碼器,底層用字節讀數據經過解碼器轉換成字符,或經過編碼器將字符轉換爲字節再輸出。
相關文章
相關標籤/搜索