一、要完成這個程序需要了解的知識點:
1.寫簡單的Java程序,例如hello world ---廢話了。 。 。 。哈哈
2、了解java的文件操作
3、了解java的buffer操作
4.對檔案操作的一些異常處理點:1、來源檔案不能讀取到的情況。 2、目的文件創建失敗的情況3、文件鎖問題4、字元亂碼問題。 。 。可能不全啊
這些是需要用的包
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; IO操作時需要做異常處理
個人感覺這個效率高的方式,安裝計算機來講,效率高的操作應該是對內存的操作是比較高的了,直接對IO的操作應該是相對低的。 。所以這裡選的是讀到內存在統一寫IO,程式碼如下:
package com.itheima;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/** * 5、 寫程式寫程式一個拷貝一個拷貝文件, 盡量使用效率高的方式. * * @author [email protected] * * 1、來源檔案不能讀取到的情況。 2.目的檔案建立失敗的情況3、檔案鎖定問題4、字元亂碼問題*/public class Test5 {public static void main(String[] args) throws IOException {String src_file = "D:/java/java.doc" ;String des_file = "D:/java/java_copy.doc";copyFile(src_file, des_file);System.out.println("OK!");}public static void copyFile(String src, String des) throws IOException {BufferedInputStream inBuff = null;BufferedOutputStream outBuff = null;try {// 新檔案輸入流並對它進行緩衝inBuff = new BufferedInputStream(new FileInputStream(src));// 新建檔案輸出流並對它進行緩衝outBuff = new BufferedOutputStream(new FileOutputStream(des));// 緩衝數組byte[] b = new byte[1024 * 5];int len;while。 ((len = inBuff.read(b)) != -1) {outBuff.write(b, 0, len);}// 刷新此緩衝的輸出流outBuff.flush();} finally {// 關閉流if (inBuff != null)inBuff.close();if (outBuff != null)outBuff.close() ;}}}
其它網友的補充
try { File inputFile = new File(args[0]); if (!inputFile.exists()) { System.out.println("來源檔案不存在,程式終止"); System.exit(1); } File outputFile = new File(args[1]); InputStream in = new FileInputStream(inputFile); OutputStream out = new FileOutputStream(outputFile); byte date[] = new byte[1024]; int temp = 0; while ((temp = in.read(date)) != -1) { out.write(date); } in.close (); out.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }