天天看點

【Java基礎】I/O流輸入/輸出

輸入/輸出

概述

java.io包

輸入、輸出兩種IO流

  • 位元組流和字元流

使用裝飾器模式

java7的java.nio

File類——通路檔案和目錄

通路檔案名相關的方法

  • String getName():傳回此File對象所表示的檔案名或路徑名
  • String getPath():傳回此File對象的絕對路徑
  • File getAbsoluteFile():傳回此File對象的絕對路徑
  • String getAbsoltePath():傳回此File對象所對應的絕對路徑名
  • String getParent():傳回此File對象所對應目錄的父目錄名
  • boolean renameTo(File newName):重命名此File對象所對應的檔案或目錄,如果重命名成功傳回true,可以用于移動檔案

檔案檢測相關的方法

  • boolean exists():檔案或目錄是否存在
  • boolean canWrite():檔案或目錄是否可寫
  • boolean canRead():
  • boolean isFile():是否是檔案,不是目錄
  • boolean isDirectory():是否是目錄,不是檔案
  • boolean isAbsolute():檔案或目錄是否是絕對路徑,跨平台,UNIX/linux/BSD的絕對路徑以“/”開頭,windows則以盤符開頭

擷取正常檔案資訊

  • long lastModified():傳回檔案的最後修改時間
  • long length():傳回檔案内容的長度

檔案操作相關的方法

  • boolean createNewFile():當此File對象所對應的檔案不存在時,建立一個新檔案,成功則傳回true
  • boolean delete():删除File對象所對應的檔案或路徑
  • static File createTempFile(Strng prefix,String suffix):
  • static File createTempFile(String prefix,String suffix,File directory)
  • void deleteOnExit():注冊一個删除鈎子,指定當Java虛拟機退出時,删除File對象所對應的檔案和目錄

目錄操作相關的方法

  • boolean mkdir():建立檔案夾,成功則傳回true
  • String[] list():列出所有檔案名和路徑名
  • File[] listFiles():列出所有子檔案和路徑
  • static File[] listRoots():列出系統所有的根路徑

檔案過濾器

  • FilenameFilter接口包含 accept(File dir,String name)
  • File file = new File("");

    file.list((dir,name)->name.endsWith(".java")||new File(name).isDirectory());

流的分類

輸入流和輸出流

  • 輸入流:隻能從中讀取資料,不能寫入資料
  • 輸出流:隻能向其寫入資料,不能讀取資料

位元組流和字元流

  • 位元組流和字元流的用法幾乎完全一樣,差別在于兩者所操作的單元不同,位元組流操作的資料單元是8位的位元組,而字元流操作的資料單元是16位的字元
  • 位元組流主要由InputStream和OutputStream作為基類,而字元流則主要由Reader和Writer作為基類

節點流和處理流

  • 可以從/向一個特定的IO裝置讀/寫資料的流,稱為節點流,也叫低級流
  • 處理流用于對一個已存在的流進行連接配接或封裝,通過封裝後的流來實作資料讀/寫功能,也叫進階流

概念模型

  • InputStream/Reader
  • OutputStream/Writer
  • 功能
    • 性能的提高
    • 操作的便捷

位元組流和字元流

位元組流(最小資料單元是8位的位元組byte)InputStream和OutputStream

  • int read()讀取單個位元組
  • int read(byte[] b)讀取最多b.length個位元組
  • int read(byte[] b,int offset,int len)讀取最多len個位元組,從offset開始
  • void write(int i)指定位元組/字元到輸出流
  • void write(byte[] b)讀取最多b.length個位元組到輸出流
  • void write(byte[] b,int offset,int len)讀取最多len個位元組到輸出流,從offset開始

字元流(最小資料單元是16位的字元char)Reader和Writer

  • int read()讀取單個位元組
  • int read(char[] c)讀取最多b.length個字元輸出流
  • int read(char[] c,int offset,int len)讀取最多len個字元,從offset開始
  • void write(int i)指定位元組/字元到輸出流
  • void write(char[] c)讀取最多b.length個字元
  • void write(char[] c,int offset,int len)讀取最多len個字元到輸出流,從offset開始

移動記錄指針

輸入/輸出流體系

處理流的用法

  • 在建立處理流時傳入一個節點流作為構造器參數即可,包裝該節點流的處理流

體系

文本内容——字元流

二進制内容——位元組流

轉換流

  • BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  • OutputStreamWriter

推回流(推回緩沖區,重新再讀,優先讀取剛被退回的内容)

  • PushbackInputStream和PushbackReader

重定向标準輸入/輸出

Java虛拟機讀寫其他程序的資料

InputStream getErrorStream():擷取子程序的錯誤流

InputStream getInputStream():擷取子程序的輸入流

OutputStream getOutputStream():擷取子程序的輸出流

RandomAccessFile

可以任意位置通路,raf.seek(位置)

mode

  • r代表隻讀
  • rw代表讀取、寫入,如果檔案不存在則嘗試建立
  • rws代表讀取、寫入,需要同步更新檔案和中繼資料,一次寫入檔案
  • rwd代表讀取、寫入,同步更新内容,不同步更新中繼資料

對象序列化

概述

使用對象流實作序列化

對象引用的序列化

自定義序列化

另一種自定義序列化機制

NIO

Java7的NIO.2