本篇可以號稱是市面最全面的InputStream的用法詳解,如下所示
在java中InputStream是位元組輸入流,用來將檔案中的資料讀取到java程式中,
InputStream是所有位元組輸入流的頂層父類,是一個抽象類,如果要用,需要使用子類,
最常用的子類:FileInputStream,
構造方法:
FileInputStream?(File file): 傳遞一個File型別的檔案
FileInputStream?(String name): 傳遞一個String型別的檔案路徑
其他方法:
int read?(): 從檔案中讀取一個位元組數的資料,并回傳讀取到的這個位元組, 如果讀取結束,回傳的是-1.
int read?(byte[] b): 一次讀取一個位元組陣列,輸入流會把讀取到的內容放入到這個位元組陣列中,并回傳讀取到的個數, 如果讀取結束回傳-1.
void close?()
使用步驟:
1. 創建一個FileInputStream流物件,系結一個資料源檔案,
2. 呼叫read方法讀取資料,
3. 釋放資源
注意: 這種方式不能讀取中文,一個中文占多個位元組,此時一次讀取一個位元組會把中文拆開讀,
*/
public class Demo01InputStream { public static void main(String[] args) throws IOException { //創建一個FileinputStream物件,并系結一個資料源檔案 // 如果檔案不存在,則會拋出例外(File not fount excep) FileInputStream fis = new FileInputStream("E:\\test\\java265.txt"); //呼叫read方法讀取資料 // int read?(): 從檔案中讀取一個位元組數的資料,并回傳讀取到的這個位元組, 如果讀取結束,回傳的是-1. int i; while ((i = fis.read()) != -1) { /* 條件做了下面的事情 1. 通過fis輸入流呼叫read方法,讀取一個位元組, 2. 把讀取到的這個位元組賦值給變數i, 3. 判斷i是否不等于-1,如果不是-1表示讀取到了內容,就在回圈中對讀取到的內容進行處理, 讀取到的內容在i里面保存*/ System.out.print((char) i); } //釋放資源demo02_inputsteam } }
使用位元組輸入流一次讀取一個位元組陣列,
int read?(byte[] b): 一次讀取一個位元組陣列,
輸入流會把讀取到的內容放入到這個位元組陣列中,并回傳讀取到的個數, 如果讀取結束回傳-1.
這種讀取方式效率高
*/
public class Demo02InputStream { public static void main(String[] args) throws IOException { //創建Fileinptstream 流物件,并系結源檔案 FileInputStream fis=new FileInputStream("E:\\Test\\java265.txt"); //呼叫read方法讀取資料. // // int read?(byte[] b): 一次讀取一個位元組陣列 // 會將資料讀取到位元組陣列里面, 位元組陣列長度是幾,那么就最多一次讀取幾個, 并 // 且回傳讀取到的個數,讀取結束,回傳-1 // // //使用回圈,一次讀取一個位元組陣列 // //定義一個位元組陣列,用來保存讀取到的資料, byte arr[]=new byte[3]; //定義一個變數來保存讀到的個數 int len;//回傳讀取到的個數 //使用回圈開始讀取 while((len=fis.read(arr))!=-1){ /* 上面條件作了下面的事情: 1. 通過位元組輸入流fis呼叫read方法,將資料讀取到Arr這個位元組陣列中 2. 將讀取到的有效個數回傳,賦值給len, 3. 判斷len是否不等于-1,如果不等于-1,表示讀取到了內容,就就在回圈中進行處理. 讀取出來的陣列在bArr陣列中放著 */ //最后一次讀取可能會有上次殘留的資料,所以不能把位元組陣列的整體都轉成String //System.out.println(new String(bArr)); //讀取到了幾個內容,就把位元組陣列的幾個元素轉成字串,并且列印 System.out.println(new String(arr,0,len)); } } }
檔案復制,
檔案復制其實就是一邊讀,一邊寫,每讀取一次就把讀取到的內容寫到檔案中,
為了保證復制效率,我們采用一次讀取一個位元組陣列的方式進行復制
思路:
1. 創建位元組輸入流物件,用來讀取
2. 創建位元組輸出流物件,用來寫入,
3. 開始讀取,一次讀取一個位元組陣列,
4. 把讀取到的位元組陣列的內容寫入到目的地檔案
5. 回圈 第3步 和 第4步
6. 釋放資源
*/
public class FileCopy { public static void main(String[] args) throws IOException { //1. 創建位元組輸入流物件,用來讀取 FileInputStream fis = new FileInputStream("E:\\test\\java265.jpg"); //2創建位元組輸出流物件,用來寫入//沒有會創建 FileOutputStream fs = new FileOutputStream("java25.com"); //3創建一個陣列用來讀取 byte arr[] = new byte[1024 * 8]; int len;//用來計數 while ((len = fis.read(arr)) != -1) { //從檔案中用位元組陣列讀取陣列,存盤到位元組陣列中 // 每讀取到一個內容,就把讀取到的內容寫入到目的地檔案 fs.write(arr,0,len); } //釋放資源 fs.close(); fis.close(); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/479202.html
標籤:Java
