Java.nio.files - Копирование файлов
Может кто-нибудь сказать мне, что я сделал не так со следующим кодом. Я не получаю ошибок - это просто идет прямо к улову.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main {
public static void main(String[] args) {
Path source = Paths.get("C:\\Users\\Public\\Pictures\\SamplePictures");
Path nwdir = Paths.get("D:\\NetbeansProjects\\CopyingFiles\\copiedImages");
try{
Files.copy(source, nwdir);
}catch (IOException e){
System.out.println("Unsucessful. What a surprise!");
}
}
}
3 ответа
Если вы посмотрите на Javadocs of Files.copy, вы заметите эту строку (выделение добавлено):
Если файл является каталогом, то он создает пустой каталог в целевом местоположении (записи в каталоге не копируются). Этот метод можно использовать с методом walkFileTree для копирования каталога и всех записей в каталоге или целого дерева файлов, где это необходимо.
Похоже, вам нужно использовать этот метод walkFileTree.
(И, как сказали комментаторы, распечатайте исключения, и они часто скажут вам, что не так!)
Наткнулся здесь на поиски подхода NIO Java7 для рекурсивного копирования каталога в другое место. Это может быть сделано с Files.walkFileTree
как упоминал Джон7 в другом ответе. Этот код, который я получил для простой копии каталога:
final Path srcDir, final Path dstDir;
Files.walkFileTree(srcDir, new SimpleFileVisitor<Path>() {
public FileVisitResult visitFile( Path file, BasicFileAttributes attrs ) throws IOException {
return copy(file);
}
public FileVisitResult preVisitDirectory( Path dir, BasicFileAttributes attrs ) throws IOException {
return copy(dir);
}
private FileVisitResult copy( Path fileOrDir ) throws IOException {
Files.copy( fileOrDir, dstDir.resolve( srcDir.relativize( fileOrDir ) ) );
return FileVisitResult.CONTINUE;
}
});
Более подробный пример, который также обрабатывает атрибуты файлов и перезаписывает существующие файлы, см. По http://docs.oracle.com/javase/tutorial/essential/io/examples/Copy.java.
Вот как мне удалось скопировать файл из одного места в другое:
import java.io.IOException;
import static java.nio.file.StandardCopyOption.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class App {
public static void main(String[] args)
{
Path source = Paths.get("E:/myFile.pdf");
Path nwdir = Paths.get("F:");
try
{
Files.copy(source, nwdir.resolve(source.getFileName()), REPLACE_EXISTING);
System.out.println("File Copied");
}
catch(IOException e)
{
e.printStackTrace();
}
}
}