實現檔案拷貝的程式
希望利用程式來實現檔案的拷貝。通過初始化引數接收原始檔和目標檔案的路徑,完成拷貝方法。實現:實現資料拷貝需要通過流 位元組流比較合適。在進行拷貝的過程中 在程式中開闢一個數組,這個陣列的長度為檔案的長度,將所有的資料一次性讀取到該陣列中,隨後將該陣列進行輸出。應該採用邊讀、邊寫的方式來完成。
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需要輸出,就採用以上的模型。