本篇可以號稱是市面最全面的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/531792.html
標籤:Java
上一篇:Mysql詳解
