一、FileInputStream()的使用步驟
第一步: 1:打開流(即創建流) 第二步: 2:通過流讀取內容 第三步: 3:用完后,關閉流資源
顯然流是Java中的一類對象,要打開流其實就是創建具體流的對象,由於是讀取硬盤上的文件,應該使用輸入流。所以找到了InputStream類,但是InputStream是抽象類,需要使用它的具體實現類來創建對象就是FileInputStream。通過new 調用FileInputStream 的構造方法來創建對象。發現FileInputStream的構造方法需要指定文件的來源。查看構造方法,可以接受字符串也可以接受File對象。我們通過構建File對象指定文件路徑。
使用流就像使用水管一樣,要打開就要關閉。所以打開流和關閉流的動作是比不可少的。如何關閉流?使用close方法即可,當完成流的讀寫時,應該通過調用close方法來關閉它,這個方法會釋放掉十分有限的操作系統資源.如果一個應用程序打開了過多的流而沒有關閉它們,那么系統資源將被耗盡.
二、如何通過流讀取內容?
查找api文檔通過read方法,查看該方法,發現有返回值,並且是int類型的,該方法一次讀取一個字節(byte)
輸入流讀取方式1:
read方法()
一次讀取一個字節,讀到文件末尾返回-1.
仔細查看api文檔發現read方法如果讀到文件的末尾會返回-1。那么就可以通過read方法的返回值是否是-1來控制我們的循環讀取。
//一次只能讀取一個字節 public static void readTest1() throws IOException{ //找到目標 File file=new File("E:\\A.txt"); //建立數據的輸入管道 FileInputStream fileInputStream=new FileInputStream(file); //開始讀數據 int context=0; while((context=fileInputStream.read())!=-1){ System.out.println((char)context);//一次只能讀一個字節 } //關閉資源 fileInputStream.close(); }
輸入流讀取方式2:
使用read(byte[] b) 方法。使用緩沖區(關鍵是緩沖區大小的確定)
使用read方法的時候,流需要讀一次就處理一次,可以將讀到的數據裝入到字節數組中,一次性的操作數組,可以提高效率。
問題1:緩沖區大小
那么字節數組如何定義?定義多大?
通過read方法,往byte數組中存內容,那么該read方法返回的是往數組中存了多少字節。
//使用緩沖 數組 讀取 缺點:無法讀取完整一個文件的數據 public static void readTest2() throws IOException{ //找到目標文件 File file=new File("E:\\A.txt"); //建立數據的輸入通道 FileInputStream fileInputStream=new FileInputStream(file); //建立緩沖字節數組,讀取文件的數據 int length=0; //緩沖數組的大小一般是1024的倍數,因為與計算機的處理單位有關 //理論上,數組越大,效率越高 byte[] buf=new byte[3];//相當於超市里邊的購物車 while((length=fileInputStream.read(buf))!=-1){ //如果使用read讀取數據傳入到了字節數組,數據是存儲到字節數組中的,read方法的返回值表示的是 本次讀取了幾個字節數據到字節數組中。 String string=new String(buf,0,length);//一定要使用0,length。因為數組采用的是覆蓋,不限定范圍,就會出現內容錯誤。 System.out.print("內容為"+string); } //關閉資源 fileInputStream.close(); }