Niezawodna alternatywa File.renameTo () w systemie Windows?

JavaFile.renameTo() wydaje się problematyczne, zwłaszcza w systemie Windows. JakoDokumentacja API mówi,

Wiele aspektów zachowania tej metody jest z natury zależnych od platformy: operacja zmiany nazwy może nie być w stanie przenieść pliku z jednego systemu plików na inny, może nie być atomowa i może się nie powieść, jeśli plik z docelową ścieżką abstrakcyjną już istnieje. Zwracana wartość powinna być zawsze sprawdzana, aby upewnić się, że operacja zmiany nazwy zakończyła się powodzeniem.

W moim przypadku, jako część procedury aktualizacji, muszę przenieść (zmienić nazwę) katalog, który może zawierać gigabajty danych (wiele podkatalogów i plików o różnych rozmiarach). Ruch jest zawsze wykonywany na tej samej partycji / dysku, więc nie ma potrzeby fizycznego przenoszenia wszystkich plików na dysku.

Tamnie powinienem bądź jakimkolwiek blokowaniem plików do zawartości katalogu, który ma zostać przeniesiony, ale wciąż, często, renameTo () nie wykonuje swojego zadania i zwraca false. (Zgaduję, że być może niektóre blokady plików wygasają arbitralnie w systemie Windows.)

Obecnie mam metodę awaryjną, która używa kopiowania i usuwania, ale to jest do bani, ponieważ może to potrwaćdużo czasu, w zależności od rozmiaru folderu. Zastanawiam się również nad udokumentowaniem faktu, że użytkownik może ręcznie przenieść folder, aby uniknąć oczekiwania godzin. Ale właściwa Droga byłaby oczywiście czymś automatycznym i szybkim.

Więc moje pytanie brzmiCzy znasz alternatywne, niezawodne podejście do szybkiego przenoszenia / zmiany nazwy w Javie w systemie Windows, albo za pomocą zwykłego JDK albo jakiejś zewnętrznej biblioteki. Albo jeśli znaszłatwy sposób wykrywania i zwalniania blokad plików dla danego folderu icała jego zawartość (być może tysiące pojedynczych plików) też byłoby dobrze.

Edytować: W tym konkretnym przypadku wydaje się, że uciekliśmy używając justrenameTo() biorąc pod uwagę kilka rzeczy; widziećta odpowiedź.

questionAnswers(14)

yourAnswerToTheQuestion