java:File類遞迴練習(拷貝)
阿新 • • 發佈:2018-11-22
從鍵盤接收兩個資料夾路徑,把其中一個資料夾中(包含內容)拷貝到另一個資料夾中
package com.heima.test; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Scanner; public class Test3 { public static void main(String[]args) throws IOException { File src=getDir(); File dest=getDir(); if(src.equals(dest)) { System.out.println("目標資料夾是原始檔夾的子資料夾"); }else { copy(src,dest); } } private static void copy(File src, File dest) throws IOException { File newdir=new File(dest,src.getName());//根據一個目錄和一個子檔案/目錄得到File物件,相當於拼接路徑得到一個File物件 newdir.mkdir();//在dest下建立src目錄 File[] subFiles=src.listFiles(); for (File file : subFiles) { if(file.isFile()) { BufferedInputStream bis=new BufferedInputStream(new FileInputStream(file)); BufferedOutputStream bos=new BufferedOutputStream( new FileOutputStream(new File(newdir,file.getName()))); int b; while((b=bis.read())!=-1) { bos.write(b); } bis.close(); bos.close(); }else { copy(file,newdir); } } } public static File getDir() { //鍵盤輸入 Scanner sc=new Scanner(System.in); System.out.println("請輸出一個資料夾路徑"); while(true) { //將鍵盤輸入的路徑儲存並封裝成一個File物件 String line=sc.nextLine(); File dir=new File(line); if(!dir.exists()) { System.out.println("您輸入的資料夾路徑不存在,請輸入一個資料夾路徑"); }else if(dir.isFile()) { System.out.println("您輸入的是個檔案路徑,請輸入一個資料夾路徑"); }else { //如果是目錄將資料夾物件返回 return dir; } } } }