2014-10-31 3 views
6

Я новичок в пакете nio от Java, и я не могу понять, как получить файл из одного каталога в другой. Моя программа должна читать через каталог и его подкаталоги и файлы процессов на основе определенных условий. Я могу получить все файлы, используя Files.walkFileTree, но когда я пытаюсь их переместить, я получаю java.nio.file.AccessDeniedException.Как перенести файл в непустой каталог?

Если я попытаюсь их скопировать, я получаю исключение DirectoryNotEmptyException. Я не смог найти помощь в Google. Я уверен, что должен быть простой способ переместить файл из одного каталога в другой, но я не могу понять это.

Это то, что я пытаюсь, что получает DirectoryNotEmptyException:

private static void findMatchingPdf(Path file, ArrayList cgbaFiles) { 
    Iterator iter = cgbaFiles.iterator(); 
    String pdfOfFile = file.getFileName().toString().substring(0, file.getFileName().toString().length() - 5) + ".pdf"; 
    while (iter.hasNext()){ 
     Path cgbaFile = (Path) iter.next(); 
     if (cgbaFile.getFileName().toString().equals(pdfOfFile)) { 
      try { 
       Files.move(file, cgbaFile.getParent(), StandardCopyOption.REPLACE_EXISTING); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    } 
} 

Я итерация по списку файлов, пытаясь соответствовать .meta файл с .pdf с одноименным названием. Как только я нахожу совпадение, я перемещаю файл метаданных в каталог с файлом pdf.

Я получаю это исключение: java.nio.file.DirectoryNotEmptyException: C: \ Test \ CGBA-RAC \ Part-A на sun.nio.fs.WindowsFileCopy.move (WindowsFileCopy.java:372) в sun.nio.fs.WindowsFileSystemProvider.move (WindowsFileSystemProvider.java:287) в java.nio.file.Files.move (Files.java:1347) at cgba.rac.errorprocessor.ErrorProcessor.findMatchingPdf (ErrorProcessor.java: 149) в cgba.rac.errorprocessor.ErrorProcessor.matchErrorFile (ErrorProcessor.java:81) в cgba.rac.errorprocessor.ErrorProcessor.main (ErrorProcessor.java:36)

+0

отредактированные некоторый код в моем OP. – user2406854

+0

Возможный дубликат [Как скопировать файл в каталог в Java 7] (http://stackoverflow.com/questions/19694471/how-to-copy-a-file-to-a-directory-in-java- 7) – naXa

ответ

11
Files.move(file, cgbaFile.getParent(), StandardCopyOption.REPLACE_EXISTING); 

Для цели, вы предоставляете каталог, который вы хотите переместить файл в. Это неверно. Цель должна быть новым именем, которое вы хотите, чтобы файл имел - новый каталог плюс имя файла.

Например, предположим, что вы хотите переместить /tmp/foo.txt в каталог /var/tmp. Вы звоните Files.move("/tmp/foo.txt", "/var/tmp"), когда вы должны звонить Files.move("/tmp/foo.txt", "/var/tmp/foo.txt").

Вы получаете эту конкретную ошибку, поскольку JVM пытается удалить целевой каталог, чтобы заменить его на файл.

Один из них должен генерировать правильный целевой путь:

Path target = cgbaFile.resolveSibling(file.getFileName()); 

Path target = cgbaFile.getParent().resolve(file.getFileName()); 
+0

Спасибо, это было самое ясное объяснение, которое я видел до сих пор. – user2406854

3
Path source = Paths.get("Var"); 
Path target = Paths.get("Fot", "Var"); 
try { 
    Files.move(
     source, 
     target, 
     StandardCopyOption.REPLACE_EXISTING); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

java.nio.file.Files - необходимость, поэтому здесь представлено отредактированное решение. Пожалуйста, смотрите, если он работает сог я никогда не использовал новый класс файлов перед тем

Смежные вопросы