2015-08-21 15 views
13

Podczas pisania odpowiedzi na SO, użytkownik próbował wskazać, że java.io.File nie powinien być użyty w nowym kodzie, zamiast tego argumentuje, że zamiast niego powinien być użyty nowynowy obiekt 10; połączył się z this article.java.io.File vs java.nio.Files, który jest preferowany w nowym kodzie?

Teraz rozwijam się na Jawie od kilku lat i nie słyszałem wcześniej tego argumentu; od przeczytania jego postu szukałem i nie znalazłem wielu innych źródeł, które to potwierdzają, i osobiście mam wrażenie, że wiele argumentów w tym artykule jest słabych i że jeśli wiesz, jak je czytać, błędy rzucane przez Plik klasa ogólnie powie ci dokładnie, co to jest problem.

Ponieważ jestem stale się rozwija nowy kod moje pytanie jest takie:

Jest to aktywny argumentem w społeczności Java? Czy kod Files jest preferowany ponad File? Jakie są główne zalety/wady między tymi dwoma?

+0

Jednym z ważnych powodów jest wykorzystanie strumieni do operacji na plikach, na przykład: odczytywanie listy plików jako strumienia zamiast listy tablic – Umesh

Odpowiedz

11

documentation które połączone dają odpowiedź:

Pakiet java.nio.file definiuje interfejsy i klasy dla maszyny wirtualnej Java dostęp do plików, atrybuty plików i systemów plików. Ten interfejs API może być używany w celu pokonania wielu ograniczeń klasy java.io.File klasy . Metody toPath można użyć do uzyskania ścieżki , która używa abstrakcyjnej ścieżki reprezentowanej przez obiekt File do znalezienia pliku . Wynikowa ścieżka może być używana z klasą Files w celu zapewnienia bardziej wydajnego i rozszerzonego dostępu do dodatkowych operacji na plikach, atrybutów plików i wyjątków we/wy, aby pomóc w diagnozowaniu błędów, gdy operacja na kodzie nie powiedzie się.

5

File ma nowszą implementację: Path. Z konstruktorem Paths.get("..."). I Files ma wiele fajnych funkcji narzędziowych z lepszymi implementacjami (move zamiast czasami nieudanych File.renameTo).

A Path utrzymuje swój system plików. Dlatego możesz skopiować z systemu plików zip ("jar: file: ...... Zip") ścieżkę do innego systemu plików i na odwrót.

File.toPath() może pomóc w stopniowym przełączaniu.

Same narzędzia w numerze Files powodują, że przejście na nowsze klasy jest opłacalne.

1

Powiedziałbym, że żaden z nich nie jest "preferowany". Zamiast tego, poleciłbym, abyś spojrzał na funkcjonalność, której wymaga twoja aplikacja, i użył tego, który z java.io.File lub java.nio.Files lepiej spełnia wymagania.

Odpowiedź prawdopodobnie będzie albo losowania, albo java.nio.Files jest lepszy. Ale to zależy od ciebie lub twojego zespołu, a nie od jakiegoś innego programisty na SO.