Мне кажется, что практически все задачи уровня 6, лекции 6 java syntax pro багованые. Это будет уже 3 вопрос с претензией к валидатору. У меня все работает, долго сидел тестировал, создал вложенные папки с файлами и копировал. Валидатор пишет "Убедись, что ты используешь метод relativize класса Path." Дык окей использую, что дальше?) Проблема кстати премерно схожая с espress0 по той же задаче, однако у нее еще ошибка по моему в том, что итератор поверхностный и не лезет внутрь, в отличии от Files.walk.
package com.javarush.task.pro.task15.task1520;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/*
Глубокое копирование
*/
public class Solution {
public static void main(String[] args) throws IOException {
//напишите тут ваш код
Scanner scanner = new Scanner(System.in);
Path sourceDirectory = Path.of(scanner.nextLine());
Path targetDirectory = Path.of(scanner.nextLine());
/*
Path sourceDirectory = Path.of(
"D:\\Soft\\JavaExamples\\JavaRush\\JavaRushTasks\\1.JavaSyntax\\src\\com\\javarush\\task\\pro\\task15\\task1520\\example");
Path targetDirectory = Path.of(
"D:\\Soft\\JavaExamples\\JavaRush\\JavaRushTasks\\1.JavaSyntax\\src\\com\\javarush\\task\\pro\\task15\\task1520\\example2");
*/
Files.walk(sourceDirectory).forEach(path -> { // проходимся итератором по всем внутренним директориям и получаем каждый путь по отдельности
try (DirectoryStream<Path> files = Files.newDirectoryStream(sourceDirectory)){
if (Files.isDirectory(path)){ // если директория
Path relative = sourceDirectory.relativize(path);
// извлекаем разницу между путями заданной дирректории и дирректории находящейся в ней "example1"
Path resolve = targetDirectory.resolve(relative);
// добавляем нужный путь к папке назначения "example1" и получаем "...example2\example1"
if (Files.notExists(resolve)){ //если такой дирректории не существует, создаем ее путем копирования
Files.copy(path, resolve);
}
}
if (Files.isRegularFile(path)){ //если файл
Path relative = sourceDirectory.relativize(path); //извлекаем разницу
Path resolve = targetDirectory.resolve(relative); // добавляем к пути назначения в конец
if (Files.notExists(resolve)){ //так как директория там уже существует, копируем файл если он еще не существует
Files.copy(path, resolve);
}
}
} catch (IOException e) {
e.printStackTrace();
}
});
}
}