什麼是InputStream和OutputStream?
InputStream和OutputStream是抽象類,是所有字節輸入流和輸出流的父類。這裏,我們首先要分清楚兩個概念:
- InputStream(輸入流):輸入流是用來讀入數據的。- - - > > >讀入
- OutputStream(輸出流):輸出流是用來寫出數據的。- - - > > >寫出
文件輸入流——FileInputStream
FileInputStream 從文件系統中的某個文件中獲得輸入字節。
構造方法
//通過打開一個到實際文件的連接來創建一個 FileInputStream,該文件通過文件系統中的 File 對象 file 指定。
public FileInputStream(File file);
//通過打開一個到實際文件的連接來創建一個 FileInputStream,該文件通過文件系統中的路徑名 name 指定。
public FileInputStream(String name);
常用的方法
從輸入流中讀取一個字節大小的數據
//從此輸入流中讀取一個數據字節。
public int read();
從輸入流一次讀取一個字節數組
//從此輸入流中將最多 b.length 個字節的數據讀入一個 byte 數組中。
public int read(byte[] b);
//從此輸入流中將最多 len 個字節的數據讀入一個 byte 數組中。off:目標數組 b 中的起始偏移量。
public int read(byte[] b,int off,int len);
從文件中讀取數據:
import java.io.FileInputStream;
/**
* FileInputStream:節點流(低級流),從文件中讀入數據
* @author Administrator
*
*/
public class FISDemo01 {
public static void main(String[] args){
String content=null;
try {
int size=0;
//定義一個字節緩衝區,該緩衝區的大小根據需要來定義
byte[] buffer=new byte[1024];
FileInputStream fis=new FileInputStream("FOSDemo.txt");
//循環來讀取該文件中的數據
while((size=fis.read(buffer))!=-1){
content=new String(buffer, 0, size);
System.out.println(content);
}
//關閉此文件輸入流並釋放與此流有關的所有系統資源。
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
文件輸出流——FileOutputStream
文件輸出流是用於將數據寫入到文件中。
構造方法
//創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流。
public FileOutputStream(File file);
//創建一個向指定 File 對象表示的文件中寫入數據的文件輸出流。如果第二個參數爲 true,則將字節寫入文件末尾處,而不是寫入文件開始處。
public FileOutputStream(File file,boolean append);
//創建一個向具有指定名稱的文件中寫入數據的輸出文件流。
public FileOutputStream(String name);
//創建一個向具有指定 name 的文件中寫入數據的輸出文件流。如果第二個參數爲 true,則將字節寫入文件末尾處,而不是寫入文件開始處。
public FileOutputStream(String name,boolean append);
常用的方法
向文件中寫入一個字節大小的數據
//向文件中寫入一個字節大小的數據
public void write(int b);
向文件中一次性寫入一個字節數組的數據
//將 b.length 個字節從指定 byte 數組寫入此文件輸出流中。
public void write(byte[] b);
//指定 byte 數組中從偏移量 off 開始的 len 個字節寫入此文件輸出流。
public void write(byte[] b,int off,int len);
向文件中寫出數據:
import java.io.FileOutputStream;
/**
* FileOutputStream:節點流(低級流),向文件中寫出數據
* @author Administrator
*
*/
public class FOSDemo01 {
public static void main(String[] args){
try {
//向文件中寫入字節數組
String font="輸出流是用來寫入數據的!";
FileOutputStream fos = new FileOutputStream("FOSDemo.txt");
fos.write(font.getBytes());
//關閉此文件輸出流並釋放與此流有關的所有系統資源。此文件輸出流不能再用於寫入字節。 如果此流有一個與之關聯的通道,則關閉該通道。
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
使用FileInputStream和FileOutputStream實現文件的複製
import java.io.FileInputStream;
import java.io.FileOutputStream;
/**
* 使用文件輸入流和文件輸出流實現文件的複製
* @author Administrator
*
*/
public class SummaryFISAndFOS {
public static void main(String[] args){
/**
* 1.先將文件中的內容讀入到輸入流中
* 2.將輸入流中的數據通過輸出流寫入到目標文件中
* 3.關閉輸入流和輸出流
*/
try {
long begin=System.currentTimeMillis();
//從輸入流中讀取數據
FileInputStream fis=new FileInputStream("FOSDemo.txt");
//向輸出流中寫入數據
FileOutputStream fos=new FileOutputStream("FISAndFOSDest.txt");
//先定義一個字節緩衝區,減少I/O次數,提高讀寫效率
byte[] buffer=new byte[10240];
int size=0;
while((size=fis.read(buffer))!=-1){
fos.write(buffer, 0, size);
}
fis.close();
fos.close();
long end=System.currentTimeMillis();
System.out.println("使用文件輸入流和文件輸出流實現文件的複製完畢!耗時:"+(end-begin)+"毫秒");
} catch (Exception e) {
e.printStackTrace();
}
//解決JNI問題(Java Native Interface)
System.exit(0);
}
}
運行結果:
使用文件輸入流和文件輸出流實現文件的複製完畢!耗時:17毫秒
以上基本上就是我們經常用到的方法的介紹,記得最後一定要close()
哦!