В моей программе я предполагаю скопировать каталог в другой каталог с 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.");
}
}
}