日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java IO总结

發布時間:2024/4/15 java 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java IO总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java IO總結

一、概要

  Java I/O主要包括如下幾個層次,包含三個部分:

  • 流式部分――IO的主體部分;
  • 非流式部分――主要包含一些輔助流式部分的類,如:File類、RandomAccessFile類和FileDescriptor等類;
  • 其他類--文件讀取部分的與安全相關的類,如:SerializablePermission類,以及與本地操作系統相關的文件系統的類,如:FileSystem類和Win32FileSystem類和WinNTFileSystem類。

  主要的類如下:

  • File(文件特征與管理):用于文件或者目錄的描述信息,例如生成新目錄,修改文件名,刪除文件,判斷文件所在路徑等。
  • InputStream(二進制格式操作):抽象類,基于字節的輸入操作,是所有輸入流的父類。定義了所有輸入流都具有的共同特征。
  • OutputStream(二進制格式操作):抽象類。基于字節的輸出操作。是所有輸出流的父類。定義了所有輸出流都具有的共同特征。
  • Reader(文件格式操作):抽象類,基于字符的輸入操作。
  • Writer(文件格式操作):抽象類,基于字符的輸出操作。
  • RandomAccessFile(隨機文件操作):一個獨立的類,直接繼承至Object.它的功能豐富,可以從文件的任意位置進行存取(輸入輸出)操作

  ?Java中IO流的體系結構如圖:

    

  Java流類的類結構圖:

    

二、字節流

2.1 輸入字節流?InputStream

  基本輸入字節流:

?  裝飾輸入字節流:

?  InputStream中的三個基本的讀方法

    • abstract int read()?:讀取一個字節數據,并返回讀到的數據,如果返回-1,表示讀到了輸入流的末尾。
    • int? read(byte[] b)?:將數據讀入一個字節數組,同時返回實際讀取的字節數。如果返回-1,表示讀到了輸入流的末尾。
    • int? read(byte[] b, int off, int len)?:將數據讀入一個字節數組,同時返回實際讀取的字節數。如果返回-1,表示讀到了輸入流的末尾。off指定在數組b中存放數據的起始偏移位置;len指定讀取的最大字節數。

    流結束的判斷:方法read()的返回值為-1時;readLine()的返回值為null時。
  

  其它方法

    • long skip(long n):在輸入流中跳過n個字節,并返回實際跳過的字節數。
    • int available()?:返回在不發生阻塞的情況下,可讀取的字節數。
    • void close()?:關閉輸入流,釋放和這個流相關的系統資源。
    • void mark(int readlimit)?:在輸入流的當前位置放置一個標記,如果讀取的字節數多于readlimit設置的值,則流忽略這個標記。
    • void reset()?:返回到上一個標記。
    • boolean markSupported()?:測試當前流是否支持mark和reset方法。如果支持,返回true,否則返回false。
?2.2 輸出字節流?OutputStream

?  基本輸出字節流:

  裝飾輸出字節流:

  OutputStream中的三個基本的讀方法

    • abstract void write(int b):往輸出流中寫入一個字節。
    • void write(byte[] b)?:往輸出流中寫入數組b中的所有字節。
    • void write(byte[] b, int off, int len)?:往輸出流中寫入數組b中從偏移量off開始的len個字節的數據。

  其它方法

    • void flush()?:刷新輸出流,強制緩沖區中的輸出字節被寫出。
    • void close()?:關閉輸出流,釋放和這個流相關的系統資源。

三、字符流  

?3.1 輸入字符流 Reader

?  

  在上面的繼承關系圖中可以看出:

    • Reader是所有的輸入字符流的父類,它是一個抽象類。
    • CharReader、StringReader是兩種基本的介質流,它們分別將Char數組、String中讀取數據。PipedReader是從與其它線程共用的管道中讀取數據。
    • BufferedReader很明顯就是一個裝飾器,它和其子類負責裝飾其它Reader對象。
    • FilterReader是所有自定義具體裝飾流的父類,其子類PushbackReader對Reader對象進行裝飾,會增加一個行號。
    • InputStreamReader是一個連接字節流和字符流的橋梁,它將字節流轉變為字符流。FileReader可以說是一個達到此功能、常用的工具類,在其源代碼中明顯使用了將FileInputStream轉變為Reader的方法。我們可以從這個類中得到一定的技巧。Reader中各個類的用途和使用方法基本和InputStream中的類使用一致。后面會有Reader與InputStream的對應關系。

?  主要方法:

    • public?int?read()?throws?IOException;?//讀取一個字符,返回值為讀取的字符?
    • public?int?read(char?cbuf[])?throws?IOException;?/*讀取一系列字符到數組cbuf[]中,返回值為實際讀取的字符的數量*/?
    • public?abstract?int?read(char?cbuf[],int?off,int?len)?throws?IOException; /*讀取len個字符,從數組cbuf[]的下標off處開始存放,返回值為實際讀取的字符數量,該方法必須由子類實現*/?

??3.2 輸出字符流?Writer

?  

  在上面的關系圖中可以看出:

    • Writer是所有的輸出字符流的父類,它是一個抽象類。
    • CharArrayWriter、StringWriter是兩種基本的介質流,它們分別向Char數組、String中寫入數據。PipedWriter是向與其它線程共用的管道中寫入數據,
    • BufferedWriter是一個裝飾器為Writer提供緩沖功能。
    • PrintWriter和PrintStream極其類似,功能和使用也非常相似。
    • OutputStreamWriter是OutputStream到Writer轉換的橋梁,它的子類FileWriter其實就是一個實現此功能的具體類(具體可以研究一SourceCode)。功能和使用和OutputStream極其類似.

?  主要方法:

    • public?void?write(int?c)?throws?IOException;?//將整型值c的低16位寫入輸出流
    • public?void?write(char?cbuf[])?throws?IOException;?//將字符數組cbuf[]寫入輸出流
    • public?abstract?void?write(char?cbuf[],int?off,int?len)?throws?IOException;?//將字符數組cbuf[]中的從索引為off的位置處開始的len個字符寫入輸出流
    • public?void?write(String?str)?throws?IOException;?//將字符串str中的字符寫入輸出流
    • public?void?write(String?str,int?off,int?len)?throws?IOException;?//將字符串str?中從索引off開始處的len個字符寫入輸出流?

四、字符流和字節流的轉換

  OutputStreamWriter(OutStreamout):將字節流以字符流輸出。  字符到字節的橋梁

  InputStreamReader(InputStream?in):將字節流以字符流輸入。  字節到字符的橋梁

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("D:/1.jpg")),"utf-8"));

五、非流式文件類--File類

?  File類是對文件系統中文件以及文件夾進行封裝的對象,可以通過對象的思想來操作文件和文件夾。File類保存文件或目錄的各種元數據信息,包括文件名、文件長度、最后修改時間、是否可讀、獲取當前文件的路徑名,判斷指定文件是否存在、獲得當前目錄中的文件列表,創建、刪除文件和目錄等方法。?

  構造函數:

  • File (String ? pathname)? ?
    • 例:File ?f1=new File("FileTest1.txt"); //創建文件對象f1,f1所指的文件是在當前目錄下創建的FileTest1.txt
  • File (String ?parent ?, ?String child)
    • 例:File f2=new ?File(“D:\\dir1","FileTest2.txt") ;// ?注意:D:\\dir1目錄事先必須存在,否則異常
  • File (File ? ?parent ?, String child)
    • 例:File ?f4=new File("\\dir3");? File ?f5=new File(f4,"FileTest5.txt"); ?//在如果 \\dir3目錄不存在使用f4.mkdir()先創建

  一個對應于某磁盤文件或目錄的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( ); 創建目錄

?六、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 } 指定位置插入內容

七、System類對IO的支持

  針對一些頻繁的設備交互,Java語言系統預定了3個可以直接使用的流對象,分別是:

  ?System.in(標準輸入),通常代表鍵盤輸入。其數據類型為InputStream

  ?System.out(標準輸出):通常寫往顯示器。其數據類型為PrintStream

  ?System.err(標準錯誤輸出):通常寫往顯示器。其數據類型為PrintStream

?

posted on 2018-11-29 20:07 ErBing 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/erbing/p/10040281.html

總結

以上是生活随笔為你收集整理的Java IO总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。