1、概要數組
Java I/O主要包括以下幾個層次,包含三個部分:安全
主要的類以下:dom
Java中IO流的體系結構如圖:ide
Java流類的類結構圖:函數
2、字節流工具
2.1 輸入字節流 InputStream測試
基本輸入字節流:spa
裝飾輸入字節流:操作系統
InputStream中的三個基本的讀方法線程
流結束的判斷:方法read()的返回值爲-1時;readLine()的返回值爲null時。
其它方法
基本輸出字節流:
裝飾輸出字節流:
OutputStream中的三個基本的讀方法
其它方法
3、字符流
3.1 輸入字符流 Reader
在上面的繼承關係圖中能夠看出:
主要方法:
3.2 輸出字符流 Writer
在上面的關係圖中能夠看出:
主要方法:
4、字符流和字節流的轉換
OutputStreamWriter(OutStreamout):將字節流以字符流輸出。 字符到字節的橋樑
InputStreamReader(InputStream in):將字節流以字符流輸入。 字節到字符的橋樑
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("D:/1.jpg")),"utf-8"));
5、非流式文件類--File類
File類是對文件系統中文件以及文件夾進行封裝的對象,能夠經過對象的思想來操做文件和文件夾。File類保存文件或目錄的各類元數據信息,包括文件名、文件長度、最後修改時間、是否可讀、獲取當前文件的路徑名,判斷指定文件是否存在、得到當前目錄中的文件列表,建立、刪除文件和目錄等方法。
構造函數:
一個對應於某磁盤文件或目錄的File對象一經建立, 就能夠經過調用它的方法來得到文件或目錄的屬性。
1)public boolean exists( ) 判斷文件或目錄是否存在
2)public boolean isFile( ) 判斷是文件仍是目錄
3)public boolean isDirectory( ) 判斷是文件仍是目錄
4)public String getName( ) 返回文件名或目錄名
5)public String getPath( ) 返回文件或目錄的路徑。
6)public long length( ) 獲取文件的長度
7)public String[ ] list ( ) 將目錄中全部文件名保存在字符串數組中返回。
File類中還定義了一些對文件或目錄進行管理、操做的方法,經常使用的方法有:
1) public boolean renameTo( File newFile ); 重命名文件
2) public void delete( ); 刪除文件
3) public boolean mkdir( ); 建立目錄
6、RandomAccessFile類
文件的分隔與合併,隨機訪問文件。
1. 該對象只能操做文件,因此構造函數接收兩種類型的參數:a.字符串文件路徑;b.File對象。
2. 該對象既能夠對文件進行讀操做,也能進行寫操做,在進行對象實例化時可指定操做模式(r,rw)
1 public static void main(String[] args) 2 { 3 try 4 { 5 insert("d:/out.txt",5,"插入的內容"); 6 } 7 catch (IOException e) 8 { 9 e.printStackTrace(); 10 } 11 } 12 13 private static void insert(String fileName,long pos,String content) throws IOException 14 { 15 //建立臨時空文件 16 File tempFile = File.createTempFile("temp",null); 17 //在虛擬機終止時,請求刪除此抽象路徑名錶示的文件或目錄 18 tempFile.deleteOnExit(); 19 FileOutputStream fos = new FileOutputStream(tempFile); 20 21 RandomAccessFile raf = new RandomAccessFile(fileName,"rw"); 22 raf.seek(pos); 23 byte[] buffer = new byte[4]; 24 int num = 0; 25 while(-1 != (num = raf.read(buffer))) 26 { 27 fos.write(buffer,0,num); 28 } 29 raf.seek(pos); 30 raf.write(content.getBytes()); 31 FileInputStream fis = new FileInputStream(tempFile); 32 while(-1 != (num = fis.read(buffer))) 33 { 34 raf.write(buffer,0,num); 35 } 36 }
7、System類對IO的支持
針對一些頻繁的設備交互,Java語言系統預約了3個能夠直接使用的流對象,分別是:
System.in(標準輸入),一般表明鍵盤輸入。其數據類型爲InputStream
System.out(標準輸出):一般寫往顯示器。其數據類型爲PrintStream
System.err(標準錯誤輸出):一般寫往顯示器。其數據類型爲PrintStream