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 № 1Przyczyną 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.