1. 程式人生 > >《黑馬程式設計師》 IO之檔案拷貝

《黑馬程式設計師》 IO之檔案拷貝

import java.io.*;
class Demo8 
{
	/*
	  檔案拷貝複習
         複製d:\temp.txt中的內容到e\目錄中
		   如何獲取當前的檔案的名稱了  
	*/
	public static void main(String[] args) 
	{
		File src;
		File destFile;
		try{
			 src=new File("d:\\temp.txt");
			//獲取絕對路徑
			String destPath=src.getAbsolutePath();
			//從路徑中擷取檔名,然後組拼成路徑
			String destName="e:\\"+destPath.substring(destPath.lastIndexOf("\\")+1);
			//生成目標物件
			destFile=new File(destName);
			if(destFile.exists())  
				destFile.delete();
			copyFile(src,destFile);
			System.out.println("複製完成");
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	public static void copyFile(File srcf,File destf) throws Exception{
		//生成讀取流
		//使用位元組來進行操作:使用輸入流和物件相關聯
		//程式設計的時候儘量父類或介面便於程式的擴充套件
		InputStream is=new FileInputStream(srcf);
		//生成輸出流
		OutputStream os=new FileOutputStream(destf);
		//建立緩衝區。提高讀取效率.因為read方法可以讀取一個位元組也可以讀取位元組陣列
		//使用字元流read方法可以支援讀取單個字元,也可以支援讀取一個數組
		//當使用陣列時,都是把資料給讀取到陣列中,然後寫入的時候都是從陣列中寫的。
		//這個陣列就是相當於一個緩衝區。
		byte[] buffer=new byte[1024]; //1mb就夠用了
		int len=0;  //記錄住讀取到位元組的個數
		while((len=is.read(buffer))!=-1){
			//如果沒有讀取到檔案的末尾就一直讀取
			//把讀取到的資料寫入到目標檔案中
			os.write(buffer,0,len);  
		}
		os.close();  //記得關閉流
		is.close();  //關閉流
	}
}