копировать файлы и каталог в java - PullRequest
0 голосов
/ 21 марта 2020

В моей программе я предполагаю скопировать каталог в другой каталог с java. Я сделал это, но единственная проблема заключается в том, что для каталогов, которые находятся внутри исходного каталога, копируются, но не файл внутри них. Почему?

Это задание: попросите пользователя указать исходный каталог и пункт назначения. Источник - каталог, который нужно скопировать; назначение - это каталог, который будет родительским для новой копии.

Сначала ваша программа должна создать новый каталог в новом месте с тем же именем, что и исходный каталог. (Вам может потребоваться сделать что-то особенное для каталогов root, если вы копируете весь диск. Каталог root не имеет родительского каталога, а часто и без имени.)

Тогда ваша программа должна создать массив с объектами класса File для каждого элемента в содержимом исходного каталога, аналогично тому, что было сделано в DirectoryListDemo.

Далее следует выполнить итерацию массива, и для каждого элемента в массиве, если это файл, скопировать файл в новый каталог с помощью метода copyFile (), взятого из CopyFileDemoE. если это каталог, рекурсивно вызывайте этот метод для копирования каталога и всего его содержимого.

Вот код:

package com.company;
import java.io.*;
import java.util.Scanner;


public class Main {

    public static void main(String[] args) throws Exception {
        Scanner src = new Scanner(System.in);
        System.out.println("Enter name of source directory to copy from: ");
        String sourceFile= src.nextLine();
        System.out.println("Enter name of destination directory to copy the files into: ");
        String destinationFile = (src.nextLine()+"/"+sourceFile);

        isDirFile(sourceFile, destinationFile);

    }
    public static void isDirFile(String source, String dest) throws Exception{

        File sourceFile = new File ("C:/"+source);
        File dirFile = new File (dest, new File(source).getName());
        dirFile.mkdirs();

        File[] entries;

        if (dirFile.exists()){
            if (sourceFile.isDirectory()){
                entries = sourceFile.listFiles();
                assert entries != null;
                for (File entry:entries){
                    if(entry.isFile()){
                        copyFile(entry.getAbsolutePath(),dest);
                    }
                    else{
                        isDirFile(entry.getAbsolutePath(),dest);
                    }
                }
            }
        }
        else{
            System.out.println("File does not exist");
        }
    }
    public static void copyFile(String source, String destination) throws Exception{
        File sourceFile;
        File destFile;

        FileInputStream sourceStream;
        FileOutputStream destSteam;

        BufferedInputStream bufferedSource = null;
        BufferedOutputStream bufferedDestination = null;
        try{

            sourceFile = new File(source);
            destFile = new File (destination, new File(source).getName());

            sourceStream = new FileInputStream(sourceFile);
            destSteam = new FileOutputStream(destFile);

            bufferedSource = new BufferedInputStream(sourceStream, 8182);
            bufferedDestination = new BufferedOutputStream(destSteam, 8182);

            int transfer;

            System.out.println("Beginning file copy: ");
            System.out.println("\tcopying "+ source);
            System.out.println("\tto      "+destination);

            while ((transfer = bufferedSource.read()) != -1){
                bufferedDestination.write(transfer);
            }

        }
        catch (IOException e){
            e.printStackTrace();
            System.out.println(" An unexpected I/O error occurred.");
        }
        finally {
            if(bufferedSource != null){
                bufferedSource.close();
            }
            if(bufferedDestination != null){
                bufferedDestination.close();
            }
            System.out.println("Files closed. Copy complete.");
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...