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、檢驗原始檔是否存在
  • 2、需要判斷目標檔案的父路徑是不是存在,不存在則建立一個
  • 3、完成檔案拷貝的操作
    /
    class CopyUtil{// 建議 因為類不需要儲存任何的屬性,所以建議將該類的構造方法私有化,使用static 方法
    private CopyUtil() {}
    /
    *
  • 寫方法的過程時候採用這種方法寫註釋,可以為了方便以後知道這個方法時用來幹什麼的
  • @param path是輸入原始檔的路徑
  • @return 如果該檔案原始檔存在,則返回一個true,否則返回false
    /
    public static boolean fileExists(String path) {//用來判斷該原始檔是否存在,即目標1
    return new File(path).exists();
    }
    /
    *
  • 根據其傳入的路徑來判斷父路徑是否存在,如果不存在則建立
  • @param path 是要操作的路徑,通過該路徑取得其父路徑
    /
    public static void creatParentDir(String path) {
    File file=new File(path);
    if(!file.getParentFile().exists()) {//路徑假如不存在,則建立父路徑
    file.getParentFile().mkdir();//建立一個父路徑
    }
    }
    /
    *
  • 實現檔案拷貝的處理
  • @param srcPath原始檔路徑
  • @param desPath目標檔案路徑
  • @return 拷貝完成返回true,否則返回false
    /
    public static boolean copy(String srcPath,String desPath){
    boolean flag=false;
    File inFile=new File(srcPath);
    File outFile=new File(desPath);
    InputStream input =null;
    OutputStream output =null;
    try{
    input=new FileInputStream(inFile);
    output=new FileOutputStream(outFile);
    copyHandle(input, output);//完成具體的拷貝處理
    flag=true;//如果沒有異常,則一定會執行到這條語句。
    }
    catch(Exception e){
    flag=false;
    }finally {
    try {
    input.close();
    output.close();
    }
    catch (IOException e) {}
    }
    return flag;
    }
    /
    *
  • 實現具體的檔案拷貝操作
  • @param input 輸入流物件
  • @param output 輸出流物件
    */
    private static void copyHandle(InputStream input,OutputStream output)throws IOException {
    //InputStram 有一個讀取單個位元組的做法 int read();
    //OutputStram 有一個輸出單個位元組的做法 int write(int data);
    long start=System.currentTimeMillis();
    int temp=0;
    // do {
    // temp=input.read();
    // output.write(temp);
    // }while(temp!=-1);//如果有資料則一直讀取,直到讀完所有的資料為止
    byte data[]=new byte [2048];

while((temp=input.read())!=-1){//表示讀取輸入流的一個位元組,再判斷讀取後的位元組(儲存在temp 中)是否為-1,
output.write(data,0,temp);//以上的方法針對的還是一個位元組。但是為了加速,需要開闢一個位元組陣列。
}
long end=System.currentTimeMillis();
System.out.println(“拷貝共用時”+(end-start)+“毫秒”);
}
}
public class CopyTest { public static void main(String[] args) {
if(args.length!=2) {//現在的引數不是2
System.out.println(“錯誤的執行方式、命令呼叫:Java copy原始檔路徑 目標檔案路徑”);
System.exit(1);//系統退出
}
if(CopyUtil.fileExists(args[0])) {// 判斷原始檔是否存在?
CopyUtil.creatParentDir(args[1]);//建立目標的父目錄
System.out.println(CopyUtil.copy(args[0], args[1]) ? “檔案拷貝成功”:“檔案拷貝失敗”);
}else {
System.out.println(“對不起 原始檔不存在”);
}
}
}
如果資料要求在InputSream需要輸出,就採用以上的模型。