前言:IO流主要分為兩大類,分別是字節流與字符流
注意:
1、音頻文件、圖片、視頻(範圍廣),就用字節流
2、只涉及到文本的,就用字符流
使用字節流複製文本內容(其他文件也可以)
代碼如下:
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;public class CopyFile { public static void main(String[] args) { try{ File inFile=new File("src.txt"); //源文件InputStream in=new FileInputStream(inFile); //文件輸入流File outFile=new File("tar.txt"); //目標文件OutputStream out=new FileOutputStream(outFile); //文件輸出流byte[] buff=new byte[1024]; //創建緩衝區,分配1024個字節大小的內存給buff int num=0; while((num=in.read(buff))!=-1){ //判斷每次讀取的最大字節數是否為1024 out.write(buff,0,num);// out.write(buff); //這樣也可以,不過容易造成文件內容不正確out.flush(); //刷新緩衝區String s=new String(buff); System.out.println("文件內容複製成功"); System.out.println("文件複製內容為/n"+s); } in.close(); //關閉輸入流out.close(); //關閉輸出流// inFile.delete(); //刪除源文件// outFile.renameTo(new File("reName.txt")); //輸出文件重命名} catch(FileNotFoundException e){ e.printStackTrace(); //在命令行打印異常信息在程序中出錯的位置及原因} catch(IOException e){ e.printStackTrace(); } }}使用字符流複製文本內容(僅限文本文件)
代碼如下:
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class CopyFile{ public static void main(String[] args) { try{ File inFile=new File("D:/src.txt"); //源文件FileReader fileReader=new FileReader(inFile); //讀取文件字符流BufferedReader bufferedReader=new BufferedReader(fileReader); //把讀取到的字符流放入緩存File outFile=new File("D:/tar.txt"); //目標文件FileWriter fileWrite=new FileWriter(outFile); //寫入字符流BufferedWriter bufferedWriter=new BufferedWriter(fileWrite); //把要輸入的字符流放入緩存String s=""; String str = ""; while((s=bufferedReader.readLine())!=null){ //判斷文件字符流是否讀取完畢bufferedWriter.write(s); //字符流緩存寫入文件bufferedWriter.newLine(); //按行讀取,遇到換行符則換行bufferedWriter.flush(); //刷新緩存str+=s; } System.out.println("文件複製內容為/n"+str); //關閉輸入輸出流fileReader.close();bufferedReader.close(); fileWrite.close();bufferedWriter.close();// inFile.delete(); //刪除源文件// outFile.renameTo(new File("reName.txt")); //輸出文件重命名} catch(FileNotFoundException e){ e.printStackTrace(); //在命令行打印異常信息在程序中出錯的位置及原因} catch(IOException e){ e.printStackTrace(); } }}說明:
如果想以追加文件內容,而不是覆蓋的方式來複製文本內容,則修改如下
OutputStream out=new FileOutputStream(outFile,true); //字節流
FileWriter fileWrite=new FileWriter(outFile,true); //字符流
如果要在字符流指定緩存區大小,則修改如下
BufferedWriter bufferedWriter=new BufferedWriter(fileWrite,1024);