1. 程式人生 > >java遞迴實現複製一個資料夾下所有檔案的功能

java遞迴實現複製一個資料夾下所有檔案的功能

今天開始學習java的IO,學了一個複製檔案的例子程式後想自己實現以下如何複製一個資料夾,複製檔案的例子程式如下:

package io.github.liuzhan214;
import java.io.File;
import java.io.IOException;

public class Main {

    void solve() {
        File file = new File("F:\\javaIOTest\\new.txt");
        if(!file.exists()) {
            try {
                file.createNewFile();
            } 
            catch
(IOException e) { e.printStackTrace(); } } else { System.out.println(file.getName()); } File dir = new File("F:\\javaIOTest"); System.out.println(dir.getName()); if(dir.isDirectory()) { String[] filename = dir.list(); for
(String str: filename) { File tempFile = new File(dir.getPath() + File.separator + str); if(tempFile.isFile()) { System.out.println("File: " + tempFile.getPath()); } else if(tempFile.isDirectory()) { System.out
.println("Dir: " + tempFile.getPath()); } } } } public static void main(String[] args) { Main main = new Main(); main.solve(); } }
createNewFile可以建立一個檔案
mkdir()可以建立一個目錄
FileInputStream和FileOutoutStream可以實現檔案的複製

實現資料夾複製的程式碼如下

package io.github.liuzhan214;

import java.util.Scanner;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Main {

    Scanner scanner = new Scanner(System.in);

    void solve() {
        String inputString = scanner.next();
        String outputString = scanner.next();
        File inputFile = new File(inputString);
        File outputFile = new File(outputString);
        if(inputFile.exists() == false || outputFile.exists() == false) {
            System.out.println("輸入或者輸出路徑不合法!"); return;
        }
        File sourceFile = inputFile;
        File destFile = new File(outputFile.getPath() + File.separator + inputFile.getName());
        try {
            myCopy(sourceFile,destFile);
        } catch(Exception e) {
            System.out.println("複製出現錯誤!"); return;
        }
        System.out.println(sourceFile.getPath() + "->" + destFile.getPath() +  "複製成功!");  
    }

    void myCopy(File sourceFile,File destFile) throws Exception{
        //保證sourceFile一定存在,destFile一定不存在,因此先建立destFile
        if(sourceFile.isFile()) destFile.createNewFile();
        else if(sourceFile.isDirectory()) destFile.mkdir();

        if(sourceFile.isFile()) copy(sourceFile,destFile);
        else if(sourceFile.isDirectory()) {
            File[] files = sourceFile.listFiles();
            for(File ele : files) {
                File newDestFile = new File(destFile.getPath() + File.separator + ele.getName());
                myCopy(ele,newDestFile);
            }
        }
    }
    void copy(File sourceFile,File destFile) throws Exception{
        //保證sourceFile一定存在,destFile一定存在
        FileInputStream inputStream = new FileInputStream(sourceFile);
        FileOutputStream outputStream = new FileOutputStream(destFile);
        byte[] arr = new byte[256];
        int len = 0;
        while((len = inputStream.read(arr)) > 0) {
            outputStream.write(arr, 0, len);
        }
        inputStream.close();
        outputStream.close();
    }

    void close() {
        scanner.close();
    }
    public static void main(String[] args) {
        Main main = new Main();
        main.solve();
        main.close();
    }
}