Path,Files鞏固,題目:從鍵盤接收兩個文件夾路徑,把其中一個文件夾中(包含內容)拷貝到另一個文件夾中


  這個題目用傳統的File,InputStream可以做,但是如果用Files,Path類做,雖然思路上會困難一些,但是代碼簡潔了很多,以下是代碼:

import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.Scanner;

//從鍵盤接收兩個文件夾路徑,把其中一個文件夾中(包含內容)拷貝到另一個文件夾中
public class Demo1 {
    public static void main(String[] args) throws IOException {
        Path path1=getPath();    //獲取源文件夾路徑
        Path path2=getPath();   //獲取目的文件夾路徑
        Path path=path1.getFileName();    //獲取源文件的最后一個文件名
        path2=path2.resolve(path);     //在目的文件中建立文件夾存儲源文件的內容
        copy(path1,path2); 
    }

    public static void copy(Path path1, Path path2) throws IOException {
        Files.walkFileTree(path1, new SimpleFileVisitor<Path>() {
            //在訪問文件夾前執行的操作
            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
                Path p1=path1.relativize(dir);   //獲取文件夾相對路徑
                Path p2=path2.resolve(p1);    //在目的文件夾中建立路徑
                Files.createDirectories(p2);   //建立文件夾.
                return FileVisitResult.CONTINUE;    //繼續訪問.
            }

            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                Path p1=path1.relativize(file);     //獲取文件相對於源文件的相對路徑
                Path p2=path2.resolve(p1);      //獲取文件在目的文件中的路徑位置
                Files.copy(file, p2);         //利用Files類的copy功能復制文件
                return FileVisitResult.CONTINUE;     //繼續訪問.
            }

            @Override
            public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
                return FileVisitResult.CONTINUE;     //訪問失敗,繼續訪問.
            }
             
        });
    }

    public static Path getPath() {
        System.out.println("請輸入一個文件夾!");
        String str=null;
        Scanner sc=new Scanner(System.in);
        str=sc.nextLine();
        Path path=Paths.get(str);        //獲取路徑
        if(!Files.exists(path)) {
            System.out.println("請輸入一個存在的文件夾");
            getPath();
        }
        if(Files.isRegularFile(path)) {
            System.out.println("請輸入文件!");
            getPath();
        }
        return path;
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM