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();
    }
 }

}
Другие вопросы по тегам