2011-07-04 14 views
9
// File (or directory) to be moved 
File file = new File("filename"); 

// Destination directory 
File dir = new File("directoryname"); 

// Move file to new directory 
boolean success = file.renameTo(new File(dir, file.getName())); 
if (!success) { 
    // File was not successfully moved 
    //can it be because file with file name already exists in destination? 
} 

Jeśli plik o nazwie "nazwa pliku" już istnieje w miejscu docelowym, zostanie zastąpiony nowym?można file.renameAby zastąpić istniejący plik?

+4

Czy to testujesz? – wjans

+2

Dlaczego nie przetestujesz tego i nie dowiesz się? Czy chcesz wiedzieć, czy zachowanie jest inne w różnych środowiskach? – aldrin

+0

@wjans @aldrin Oczywiście, że mógłby to sprawdzić. Ale ja na przykład wolę dokumentację w połączeniu z testami –

Odpowiedz

10

Według Javadoc:

Wiele aspektów zachowania tej metody są z natury zależne od platformy: Operacja zmiany nazwy może nie być w stanie przenieść plik z jednego systemu plików na inny, może nie być atomowym i może się nie powieść, jeśli plik o docelowej abstrakcyjnej nazwie ścieżki już istnieje. Zwracaną wartość należy zawsze sprawdzić, aby upewnić się, że operacja zmiany nazwy zakończyła się powodzeniem.

+1

sry, widzę teraz, że cytaty tego Javadoc zostały już zamieszczone tutaj .... – mnicky

2

Od Javadoc:

Operacja zmiany nazwy może nie być w stanie przenieść plik z jednego systemu plików do innego, to może nie być atomowy, a może nie uda, jeśli plik z na docelowa abstrakcyjna ścieżka numer już istnieje.

Testowałem następujący kod:

To działa po raz pierwszy, po raz drugi nie powiedzie się zgodnie z oczekiwaniami. Aby przenieść plik, należy usunąć lub zmienić nazwę miejsca docelowego, jeśli jest to wymagane.

public class Test { 
    public static void main(String[] args) throws IOException { 
     File file = new File("c:\\filename"); 
     file.createNewFile(); 
     File dir = new File("c:\\temp"); 
     boolean success = file.renameTo(new File(dir, file.getName())); 
     if (!success) { 
      System.err.println("succ:" + success); 
     } 
    } 
} 
0

Jak to jest zależne od systemu nie należy spodziewać ona zachowywać ten lub inny sposób. Sprawdź to i zaimplementuj własną logikę.

Powiązane problemy