Пожалуйста, посмотрите на код, который у меня есть, и, если возможно, объясните, что я делаю неправильно. Я пытаюсь научиться.
Я создал небольшую программу для поиска типа файла в каталоге и во всех его подкаталогах и скопировал их в другую папку.
Код
import java.util.ArrayList;
import java.util.List;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
public class FandFandLoop {
public static void main(String[] args) {
final File folder = new File("C:/Users/ina/src");
List<String> result = new ArrayList<>();
search(".*\\.txt", folder, result);
File to = new File("C:/Users/ina/dest");
for (String s : result) {
System.out.println(s);
File from = new File(s);
try {
copyDir(from.toPath(), to.toPath());
System.out.println("done");
}
catch (IOException ex) {
ex.printStackTrace();
}
}
}
public static void copyDir(Path src, Path dest) throws IOException {
Files.walk(src)
.forEach(source -> {
try {
Files.copy(source, dest.resolve(src.relativize(source)),
StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
e.printStackTrace();
}
});
}
public static void search(final String pattern, final File folder, List<String> result) {
for (final File f : folder.listFiles()) {
if (f.isDirectory()) {
search(pattern, f, result);
}
if (f.isFile()) {
if (f.getName().matches(pattern)) {
result.add(f.getAbsolutePath());
}
}
}
}
}
Это работает, но на самом деле это взять мои .txt
файлы и записать их в другой файл с именем dest
без расширения.
И в какой-то момент он удаляет папку dest
.
Удаление происходит из-за StandardCopyOption.REPLACE_EXISTING
, если я понимаю, но то, что я хотел бы получить, было то, чтоесли несколько файлов имеют одно и то же имя, то должна храниться только одна его копия.