1. 程式人生 > >java-IO流練習

java-IO流練習

ring 文件夾路徑 進行 文件名 abs 復制 nextline stream body

1.從鍵盤接收兩個文件夾路徑,把其中一個文件夾中(包含內容)拷貝到另一個文件夾中

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

public class DirCopyDemo {

    public static void main(String[] args) throws IOException {
        Scanner s = new Scanner(System.in);
        System.out.println("輸入源目錄路徑");
        String s1 = s.nextLine();
        System.out.println("輸入目的目錄路徑");
        String s2 = s.nextLine();
        File from = new File(s1);
        File to = new File(s2);
        if(!to.exists()){
            to.mkdirs();
        }
        CopyDir(from, to);
    }

    private static void CopyDir(File from, File to) throws IOException {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        File[] froms = from.listFiles();
        int len=0;
        byte[] wj = new byte[1024];
        for (File f : froms) {
            if (f.isDirectory()) {
                // 如果是文件夾,需要在to中創建一個名稱相同的文件夾,
                // 然後再遞歸到該文件夾裏面,復制相應的文件
                // 對於創建的文件夾名稱,需要獲取到目的to絕對路徑,然後加上f的名稱
                File newfile = new File(to.getAbsolutePath() + "\\"
                        + f.getName());
                newfile.mkdirs();
                // 此處就需要進入新建的文件夾內部進行遞歸
                // 這樣才能復制該文件夾內的文件
                CopyDir(f, newfile);
            } else {
                // 在輸出目的to的文件名稱 需要先獲取到f的文件名稱 然後加上file2的絕對路徑
                 //這樣就能創建一個名稱相同的文件  
                fis = new FileInputStream(f);
                fos= new FileOutputStream(to.getAbsolutePath()+"\\"+f.getName());
                while ((len = fis.read(wj)) != -1) {
                    fos.write(wj, 0, len);
                    fos.flush();
                }
                fis.close();  
                fos.close();  
            }
        }
    }

}

java-IO流練習