輸入/輸出
概述
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代表讀取、寫入,同步更新内容,不同步更新中繼資料