FileInputStream和FileOutputStream分别表示讀寫檔案資料流,前者是将檔案資料讀取到記憶體中,後者表示将記憶體中的資料寫入到檔案中。
1.FileInputStream
FileInputStream從檔案系統中的檔案中獲得輸入的位元組資料。主要的構造方法有以下三種:
FileInputStream(File file)
用File對象來構造
FileInputStream(String pathName)
用檔案路徑名來構造
FileInputStream(FileDescriptor fdObj)
以檔案描述符類對象來構造
主要的方法和InputStream類似,點選這裡檢視。其他方法如下所示:
FileChannel getChannel()
獲得該檔案輸入流唯一的檔案通道對象
FileDescriptor getFD()
獲得被檔案輸入流使用的檔案的檔案描述符對象
2.FileOutputStream
FileOutputStream是一個向檔案(File)中或者檔案描述符(FileDescriptor)中寫入資料的輸出流。檔案是否可用或者可建立取決于底層平台。在某些平台中,允許檔案在某一個時刻僅僅被一個檔案輸出流進行寫操作。在這種情況下,用已經被使用的檔案來構造檔案輸出流将會發生錯誤。檔案輸出流是用來寫原始位元組資料的,例如圖檔資料;如果要寫入字元資料,可以考慮使用FileWriter類。如果該檔案找不到,則會自動建立該檔案,前提是允許建立,否則将會出現檔案找不到錯誤。如果該檔案找到,但是是檔案夾而不是正常檔案,則也會發生檔案找不到錯誤,如果該檔案不允許打開,也會發生錯誤。
主要的構造方法有以下幾種:
FileOutputStream(File file)
用File對象來構造,寫檔案時,從頭開始寫
FileOutputStream(File file,boolean append)
用File對象來構造,如果第二個參數為true,則表示以追加的方式寫檔案,從尾部開始寫操作。第二個參數預設為false。
FileOutputStream(FileDescriptor fdObj)
用檔案描述符來構造
FileOutputStream(String path)
用檔案路徑名來構造,寫檔案時,從頭開始寫
FileOutputStream(String path,boolean append)
用檔案路徑名來構造,如果第二個參數為true,寫檔案時,從尾部開始寫,以追加的形式寫檔案。第二個參數預設為false。
常用的方法和OutputStream類似,請點選這裡檢視。其他方法如下所示:
FileChannel getChannel()
獲得該檔案輸入流唯一的檔案通道對象
FileDescriptor getFD()
獲得被檔案輸入流使用的檔案的檔案描述符對象
下面是某圖像讀寫操作的java代碼:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileTest {
/*
* 先讀取圖檔資料,然後将該圖檔寫到其他路徑中
*/
public static void main(String[] args) throws IOException{
String image = "G:\\test.jpg"; //源檔案路徑
String goalPath = "E:\\follow.jpg"; //目标檔案路徑
FileInputStream fis = new FileInputStream(image); //初始化輸入流
FileOutputStream fos = new FileOutputStream(goalPath);
int len=fis.available(); //流中位元組數
System.out.println("圖檔大小為:"+len+"個位元組");
int ch=0; //一個位元組一個位元組讀
while((ch = fis.read()) != -1){
fos.write(ch); //一個位元組一個位元組寫
}
}
}
原始檔案截圖:
程式運作結果截圖:
可以看出,讀取的檔案的大小和檔案屬性中檢視的是一緻的,都是9811位元組
寫入的圖檔檔案截圖: