Obecnie pracuję nad projektem, który przetwarza pliki z katalogu źródłowego w jednej z jego procedur. Jest proces Java, który szuka określonego katalogu i próbuje czytać i przetwarzać pliki, jeśli istnieją. Pliki są zamykane i aktualizowane przez proces innej osoby trzeciej. Pytanie brzmi: jak mogę sprawdzić, czy plik jest całkowicie napisany? Próbuję użyć file.length()
, ale wygląda na to, że nawet jeśli proces pisania nie został zakończony, zwraca rzeczywisty rozmiar. Mam wrażenie, że rozwiązanie powinno być zależne od platformy. Każda pomoc będzie doceniona.Sprawdzanie, czy plik jest całkowicie zapisany.
AKTUALIZACJA: To pytanie nie różni się znacząco od duplikatu, ale ma odpowiedź z działającym fragmentem kodu, który jest wysoko oceniany.
Czy rozważałeś użycie blokad plików? – cklab
Dzięki. Sprawdzam to. Czy możemy być pewni, że zamki są zawsze tworzone w procesie pisania? –
Cóż, chodzi o to, że jeśli spróbujesz uzyskać blokadę, powinieneś otrzymać wyjątek. Właśnie natknąłem się na to: http://docs.oracle.com/javase/7/docs/api/java/io/File.html # canWrite% 28% 29 Nigdy go nie używałeś, ale możesz go zrobić, żeby zobaczyć, jak to działa. Wygląda ciekawie. – cklab