2014-10-31 17 views
6

Jestem nowy w pakiecie nio Java i nie mogę się dowiedzieć, jak uzyskać plik z jednego katalogu do drugiego. Mój program powinien odczytać katalog i jego podkatalogi oraz pliki procesów na podstawie określonych warunków. Mogę uzyskać wszystkie pliki przy użyciu Files.walkFileTree, ale gdy próbuję je przenieść, otrzymuję wyjątek java.nio.file.AccessDeniedException.Jak przenieść plik do niepustego katalogu?

Jeśli spróbuję je skopiować, otrzymuję wyjątek DirectoryNotEmptyException. Nie mogłem znaleźć żadnej pomocy w Google. Jestem pewien, że musi być łatwy sposób na przeniesienie pliku z jednego katalogu do drugiego, ale nie mogę tego rozgryźć.

To co próbuję że dostaje 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(); 
      } 
     } 
    } 
} 

mam iteracja listy plików, starając się dopasować .meta plik .pdf z tej samej nazwie. Po znalezieniu dopasowania przenoszę plik metadanych do katalogu z plikiem pdf.

otrzymuję ten wyjątek: java.nio.file.DirectoryNotEmptyException: C: \ test \ CGBA-RAC \ Part-A na sun.nio.fs.WindowsFileCopy.move (WindowsFileCopy.java:372) na sun.nio.fs.WindowsFileSystemProvider.move (WindowsFileSystemProvider.java:287) w pliku java.nio.file.Files.move (Files.java:1347) w cgba.rac.errorprocessor.ErrorProcessor.findMatchingPdf (ErrorProcessor.java: 149) w cgba.rac.errorprocessor.ErrorProcessor.matchErrorFile (ErrorProcessor.java:81) w cgba.rac.errorprocessor.ErrorProcessor.main (ErrorProcessor.java:36)

+0

edytowany jakiś kod w moim OP. – user2406854

+0

możliwy duplikat [Jak skopiować plik do katalogu w Javie 7] (http://stackoverflow.com/questions/19694471/how-to-copy-a-file-to-a-directory-in-java- 7) – naXa

Odpowiedz

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

dla celu, jesteś dostarczanie katalogu, który chcesz przenieść plik do. To jest niepoprawne. Docelowa powinna być nową ścieżką do pliku - nowy katalog plus nazwa pliku.

Załóżmy na przykład, że chcesz przenieść /tmp/foo.txt do katalogu /var/tmp. Dzwonisz pod numer Files.move("/tmp/foo.txt", "/var/tmp"), kiedy powinieneś dzwonić pod numer Files.move("/tmp/foo.txt", "/var/tmp/foo.txt").

Otrzymujesz ten konkretny błąd, ponieważ maszyna JVM próbuje usunąć katalog docelowy w celu zastąpienia go plikiem.

Jednym z nich powinien wygenerować poprawną ścieżkę docelową:

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

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

Dziękuję, to było najjaśniejsze wyjaśnienie, jakie do tej pory widziałem. – 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(); 
} 

Plik java.nio.file.Files jest koniecznością, dlatego tutaj jest edytowane rozwiązanie. Proszę sprawdzić, czy to działa bo ja nigdy nie korzystało z nowej klasy plików przed

Powiązane problemy