/ / Dlaczego nowy File () nie powinien być umieszczany w bloku try, ale nowy FileReader („input.txt”) powinien znajdować się w bloku try? - java

Dlaczego nowego pliku () nie należy umieszczać w bloku try, ale nowy FileReader ("input.txt") powinien znajdować się w bloku try? - java

Uczę się, jak czytać plik w Javie. Ta różnica niepokoiła mnie. Myślę, że istnieje podkreślająca różnica, której nie do końca wiem.

File inputFile = new File("input.txt");
// is perfect fine even if input.txt doesn"t exist. Why?

// but
FileReader fr = new FileReader("input.txt");
// should be put into try.. catch block?? or compiler error

Odpowiedzi:

1 dla odpowiedzi № 1

Przyczyną techniczną jest to, że jeden konstruktor zgłasza wyjątek inny niż środowisko wykonawcze, a drugi nie.

A dlaczego? Być może dlatego, że klasa File jest tylko abstrakcją wokół nazwy ścieżki systemu plików. Nie ma znaczenia, czy plik istnieje w tej ścieżce. FileReader hermetyzuje operację odczytu na rzeczywistym obiekcie systemu plików i zgłasza wyjątek, jeśli plik nie istnieje lub w inny sposób nie można go otworzyć.


4 dla odpowiedzi nr 2

Bo new FileReader("file") zgłasza sprawdzony wyjątek FileNotFoundException gdzie new File("file") doesn "t.

Zauważ, że new File nie sprawdza, czy plik faktycznie istnieje, czy nie, gdzie FileReader robi.


1 dla odpowiedzi nr 3

Bo File jest tylko obiektem reprezentującym nazwę pliku:

Abstrakcyjna reprezentacja nazw plików i katalogów.

Podczas FileReader jest otwartym zasobem używanym do odczytu zawartości pliku i implementuje AutoCloseable:

Zasób, który należy zamknąć, gdy nie jest już potrzebny.


0 dla odpowiedzi nr 4

File("input.txt") nie jest jeszcze przypisany do rzeczywistego pliku. Możesz więc sprawdzić, czy plik istnieje lub otworzyć go do zapisania w późniejszym terminie. Podczas FileReader("input.txt") faktycznie próbuje otworzyć nazwany plik do odczytu, a zatem może zgłosić wyjątek.