2013-08-27 26 views
5

Mam prostą aplikację Java, która próbuje skopiować plik przez sieć WAN (z Irlandii do NY).FileUtils.copyFile kończy się niepowodzeniem w przypadku dużych plików

Niedawno zmodyfikowałem go, aby używać FileUtils, ponieważ natywna kopia pliku Java była zbyt wolna. Zbadałem i odkryłem, że ponieważ Fileutils używa NIO, to jest lepsze. Kopia plik teraz działa świetnie, ale czasami muszę skopiować bardzo dużych plików (> 200MB) i kopiowanie nie powiedzie się z powodu błędu:

java.io.IOException: Failed to copy full contents from... 

wiem błąd oznacza, że ​​rozmiar pliku docelowego nie jest taka sama jak źródło, więc początkowo doszedłem do wniosku, że to były problemy z siecią. Proces próbuje kilkakrotnie kopiować plik co kilka godzin, ale nigdy nie jest pomyślny. Jednak, gdy ręcznie skopiuję plik za pomocą eksploratora Windows, to działa dobrze. Wydaje się, że to wyklucza sieć ... ale nie jestem tego pewien.

Szukałem, ale nie mogłem znaleźć żadnych postów o tym samym numerze. Każda pomoc będzie bardzo ceniona.

Dzięki!

Dodatek:
Używam tej metody fileutils:

public static void copyFile(java.io.File srcFile, java.io.File destFile) throws java.io.IOException 
+0

Istnieje wiele metod o nazwie 'copyFile' w' FileUtils'. Jeśli dodasz trochę kodu, aby pokazać dokładnie to, co robisz, możemy zapewnić dodatkową pomoc. –

+0

Możliwe duplikaty http://stackoverflow.com/questions/15805303/copying-a-file-using-fileutils-copyfile –

+0

Witam, widziałem post, o którym wspomniałeś, ale ma to związek z blokowaniem plików. Za każdym razem, gdy kopiuję plik, ma on unikalną nazwę, więc nie mam tego problemu. – Tony

Odpowiedz

3

Więc znalazłem problem być w folderze docelowym. Istnieje proces odpytywania, który zakłada pobranie pliku po jego skopiowaniu. Jednak plik został przeniesiony przed ukończeniem kopii. Prawdopodobnie nie stanie się to na dysku Windows, ponieważ plik będzie zablokowany (testowałem lokalnie i nie mogłem usunąć podczas kopiowania pliku). Jednak folder docelowy jest zamontowany udział celerra. Proces unixowy pod maską jest tym, co chwyta plik ... Myślę, że nie obchodzi go, czy jakiś proces Windows nadal do niego pisze.

Dzięki za poświęcony czas medPhys-pl!