檔案位元組流FileInputStream和FileOutputStream
1.完成基本檔案複製
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 功能:使用檔案位元組流實現檔案的複製
*
* 1.如何建立輸入流
*
* File file1 = new File("e:/readme.txt");
InputStream fis = new FileInputStream(file1);
*
* InputStream fis = new FileInputStream("e:/readme.txt");
*
* 2.如何建立輸出流
* File file2 = new File("e:/readme2.txt");
OutputStream fos = new FileOutputStream(file2);
*
* OutputStream fos = new FileOutputStream("e:/readme2.txt");
* 3.如何使用輸入流和輸出流
* n = fis.read();
* fos.write(n);
*
* 4.如何關閉流
*
* fis.close();
* fos.close();
* 流使用完畢一定要關閉,垃圾回收器無能為力
*
*
* @author Administrator
*
*/
public class TestCopy1 {
public static void main(String[] args) throws IOException {
//1.建立一個輸入流和輸出流
// File file1 = new File("e:/readme.txt");
// InputStream fis = new FileInputStream(file1);
//InputStream fis = new FileInputStream(new File("e:/readme.txt"));
InputStream fis = new FileInputStream("e:/readme.txt");
// File file2 = new File("e:/readme2.txt");
// OutputStream fos = new FileOutputStream(file2);
//OutputStream fos = new FileOutputStream(new File("e:/readme2.txt"));//預設覆蓋
//OutputStream fos = new FileOutputStream("e:/readme2.txt");
OutputStream fos = new FileOutputStream(new File("e:/readme2.txt"), true);//追加
//2.使用輸入流和輸出流完成複製
//2.1準備一箇中轉站:水杯
int n; //
//2.2藉助迴圈和中轉站完成複製操作
n = fis.read(); //從檔案中讀取一個位元組 byte
while(n != -1){
//寫一個位元組到目的檔案(將水杯的水放入水缸)
fos.write(n);
//再讀一個位元組(再接一杯水)
n = fis.read();
}
//3.關閉輸入流和輸出流
fis.close();
fos.close();
}
}
2.完善檔案複製--中轉站使用位元組陣列
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 功能:使用檔案位元組流實現檔案的複製
*
* 缺點1:可以實現複製,但是漢字無法正常顯示
* 缺點2:中轉站太小,影響效率
* 缺點3:沒有進行異常處理try-catch
*
* @author Administrator
*
*/
public class TestCopy2 {
public static void main(String[] args) throws IOException {
//1.建立一個輸入流和輸出流
// File file1 = new File("e:/readme.txt");
// InputStream fis = new FileInputStream(file1);
//InputStream fis = new FileInputStream(new File("e:/readme.txt"));
InputStream fis = new FileInputStream("e:/JDK_API_1_6_zh_CN.CHM");
// File file2 = new File("e:/readme2.txt");
// OutputStream fos = new FileOutputStream(file2);
//OutputStream fos = new FileOutputStream(new File("e:/readme2.txt"));//預設覆蓋
OutputStream fos = new FileOutputStream("e:/JDK_API_1_6_zh_CN2.CHM");
//OutputStream fos = new FileOutputStream(new File("e:/readme2.txt"), true);//追加
//2.使用輸入流和輸出流完成複製
//2.1準備一箇中轉站:水桶
byte [] buf = new byte[1024];
//2.2藉助迴圈和中轉站完成複製操作
int len = fis.read(buf); //讀取檔案的內容到buf陣列,返回的真正讀取的位元組數。檔案結束,返回-1
while(len !=-1){
//寫陣列的內容到目的檔案
//fos.write(buf);//寫1024
fos.write(buf, 0, len);
//再讀一次
len = fis.read(buf);
}
//3.關閉輸入流和輸出流
fis.close();
fos.close();
}
}
3.完善檔案複製--進行異常處理
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 功能:使用檔案位元組流實現檔案的複製
*
* 記住:使用位元組流不僅可以複製文字檔案(.txt, .java),
* 而且可以複製二進位制檔案(音訊 視訊 ....)
* 使用位元組流可以複製所有檔案
*
* doc檔案是二進位制檔案
* @author Administrator
*
*/
public class TestCopy3 {
public static void main(String[] args) {
InputStream fis = null;
OutputStream fos = null;
try{
//1.建立一個輸入流和輸出流
fis = new FileInputStream("e:/JDK_API_1_6_zh_CN.CHM");
fos = new FileOutputStream("e:/JDK_API_1_6_zh_CN2.CHM");
//2.使用輸入流和輸出流完成複製
//2.1準備一箇中轉站:水桶
byte [] buf = new byte[1024];
//2.2藉助迴圈和中轉站完成複製操作
int len = fis.read(buf); //讀取檔案的內容到buf陣列,返回的真正讀取的位元組數。檔案結束,返回-1
while(len !=-1){
//寫陣列的內容到目的檔案
//fos.write(buf);//寫1024
fos.write(buf, 0, len);
//再讀一次
len = fis.read(buf);
}
}catch(FileNotFoundException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
//3.關閉輸入流和輸出流
try {
if(fis != null){
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(fos != null){
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}