一、InputStream抽象類
InputStream是字節輸入流的根類,它定義了很多方法,影響着字節輸入流的行爲。
InputStream主要方法如下:
- int read():讀取一個字節,返回0到255範圍內的int字節值。如果已經到達流末尾,而且沒有可用的字節,則返回值-1。
- int read(byte b[] ):讀取多個字節,數據放到字節數組b中,返回值爲實際讀取的字節的數量,如果已經到達流末尾,而且沒有可用的字節,則返回值-1。
- int read(byte b[ ], int off, int len):最多讀取len個字節,數據放到以下標off開始字節數組b中,將 讀取的第一個字節存儲在元素b[off]中,下一個存儲在b[off+1]中,依次類推。返回值爲實際讀 取的字節的數量,如果已經到達流末尾,而且沒有可用的字節,則返回值-1。
- void close():流操作完畢後必須關閉。
上述所有方法都可能會拋出IOException,因此使用時要注意處理異常。
二、OutputStream抽象類
OutputStream是字節輸出流的根類,它定義了很多方法,影響着字節輸出流的行爲。
OutputStream主要方法如下:
- void write(int b):將b寫入到輸出流,b是int類型佔有32位,寫入過程是寫入b 的8個低位,b的24個高位將被忽略。
- void write(byte b[ ]):將b.length個字節從指定字節數組b寫入到輸出流。
- void write(byte b[ ], int off, int len):把字節數組b中從下標off開始,長度爲len的字節寫入到輸出流。
- void close( ):流操作完畢後必須關閉。
上述所有方法都聲明拋出IOException,因此使用時要注意處理異常。
三、案例:文件複製
前面介紹了兩種字節流常用的方法,下面通過一個案例熟悉一下它們的使用,該案例實現了文件復 制,數據源是文件,所以會用到文件輸入流FileInputStream,數據目的地也是文件,所以會用到文件輸出流FileOutputStream。
FileInputStream和FileOutputStream中主要方法都是繼承自InputStream和OutputStream,這裏不再贅述。下面介紹一下它們的構造方法。
FileInputStream構造方法主要有:
- FileInputStream(String name):創建FileInputStream對象,name是文件名。如果文件不存在則拋出 FileNotFoundException異常。
- FileInputStream(File file):通過File對象創建FileInputStream對象。如果文件不存在則拋出 FileNotFoundException異常。
FileOutputStream構造方法主要有: - FileOutputStream(String name):通過指定name文件名創建FileOutputStream對象。如果name文件存在,但如果是一個目錄或文件無法打開則拋出FileNotFoundException異常。
- FileOutputStream(String name, boolean append):通過指定name文件名創建FileOutputStream對 象,append參數如果爲 true,則將字節寫入文件末尾處,而不是寫入文件開始處。如果name文 件存在,但如果是一個目錄或文件無法打開則拋出FileNotFoundException異常。
- FileOutputStream(File file):通過File對象創建FileOutputStream對象。如果file文件存在,但如果 是一個目錄或文件無法打開則拋出FileNotFoundException異常。
- FileOutputStream(File file, boolean append):通過File對象創建FileOutputStream對象,append參數 如果爲 true,則將字節寫入文件末尾處,而不是寫入文件開始處。如果file文件存在,但如果是 一個目錄或文件無法打開則拋出FileNotFoundException異常。
將/Users/caizhengjie/Desktop/qq/123.txt文件內容複製到/Users/caizhengjie/Desktop/qq/asd/123.txt,文件內容 是AI-162.3764568,實現代碼如下:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
//將/Users/caizhengjie/Desktop/qq/123.txt文件內容複製到/Users/caizhengjie/Desktop/qq/asd/123.txt
// 內容是AI-162.3764586,十四個字節
public class FileCopy {
public static void main(String[] args) {
// 創建FileInputStream和FileOutputStream對象,這是自動資源管理,不需要自己關閉流
try(FileInputStream in = new FileInputStream("/Users/caizhengjie/Desktop/qq/123.txt");
FileOutputStream out = new FileOutputStream("/Users/caizhengjie/Desktop/qq/asd/1234.txt")) {
// 開始時間
long starttime = System.nanoTime();
// 準備一個緩衝區
byte[] buffer = new byte[10];
// 先讀取一次,len實際是讀取的字節數
int len = in.read(buffer);
while (len != -1){
String copyStr = new String(buffer);
// 打印複製的字符
System.out.println(copyStr);
// 開始寫入數據
out.write(buffer,0,len);
// 再讀取一次,這裏實際執行了兩次,第一次讀取了10個字節,第二次讀取了4個字節
len = in.read(buffer);
}
// 結束時間
long elapsedTime = System.nanoTime()-starttime;
System.out.println("耗時"+(elapsedTime/1000000.0)+"毫秒");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
上面的案例由於使用了字節輸入輸出流,所以不僅可以複製文本文件,還可以複製二進制文件。
以上內容僅供參考學習,如有侵權請聯繫我刪除!
如果這篇文章對您有幫助,左下角的大拇指就是對博主最大的鼓勵。
您的鼓勵就是博主最大的動力!