Jestem w trakcie automatyzacji serii działań, które wykonujemy bardzo dużo, aby zyskać trochę czasu. Obejmuje to przenoszenie plików i uruchamianie niektórych partii.Java 7 ATOMIC_MOVE podaje wyjątki
W tej konkretnej sytuacji próbuję skopiować plik z jednej lokalizacji do innej. Wszystko działa dobrze, dopóki nie spróbuję użyć opcji kopiowania ATOMIC_MOVE. To jest mój kod:
private void copyToDropFolder(Datafile datafile, String company) throws IOException{
Path datafilePath = datafile.getDataPath();
String dropFolder = locations.getLocationFor("default");
Path dropPath = Paths.get(dropFolder, company.toUpperCase(),locations.getLocationFor("drop"), datafile.getFileName());
Files.copy(datafilePath, dropPath, StandardCopyOption.ATOMIC_MOVE);
}
Sprawdziłem i rozwiązano lokalizacje datafilePath i dropPath, są one poprawne. Próbowałem z 2 innymi standardowymi opcjami kopiowania, a program działa dobrze. Tylko dla ATOMIC_MOVE dostaję wyjątek UnsupportedOperationException. Nie jest tak, że absolutnie potrzebuję tej konkretnej opcji, ale jestem ciekawy, dlaczego nie pracowałbym. Nie mogę znaleźć żadnych innych raportów na ten temat. Robię to na komputerze z Windows 7.
Czy brakuje mi czegoś? A może ATOMIC_MOVE nie jest obsługiwany?
Dlaczego próbujesz wykonać operację 'ATOMIC_MOVE' _copy_? To nie ma sensu. A może chcesz użyć 'link()'? – fge
Jaki typ systemu plików próbujesz to zrobić? Być może operacja nie jest obsługiwana (http://docs.oracle.com/javase/tutorial/essential/io/move.html) –
@fge Masz rację ... kiedy patrzysz na to w ten sposób, to nie ma sensu. Ale posiadanie opcji ATOMIC_MOVE w enumie o nazwie StandardCopyOption również nie ma większego sensu: /. Podkreślasz to ładnie, nie myślałem o tym w ten sposób. Na razie nie chcę tego używać, po prostu wypróbowałem to i nie udało mi się. Jestem zdziwiony, dlaczego to się nie uda. – anothernoc