Файловый ввод и вывод Java

Файловый ввод и вывод JavaЧтобы прочитать из файла, сконструируйте объект Scanner из объекта File, как показано ниже:

Если имя файла содержит в себе обратные косые черты, не забудьте защитить их дополнительными обратными косыми чертами: «c:\\mydirectory\\myfile.txt«.После этого вы можете выполнять чтение из файла, используя любые методы Scanner, которые мы описали выше.

Чтобы выполнить запись в файл, сконструируйте объект PrintWriter. В конструкторе просто укажите имя файла:

Если файл еще не существует, вы можете просто использовать команды print, println и printf, как вы поступали, осуществляя вывод в System.out.

Вы можете сконструировать Scanner со строковым параметром, но при этом сканер интерпретирует эту строку как данные, а не как имя файла. Например, если вы вызовете конструктор так, как показано ниже, то Scanner увидит символы ‘m‘, ‘y‘, ‘f‘ и так далее. Вероятно, это не то, что вы подразумевали.

Когда вы специфицируйте относительное имя файла, такое как «myfile.txt«, «mydirectory/myfile.txt» или «../myfile.txt«, то файл ищется относительно каталога, в котором была запущена виртуальная машина Java. Если вы запустили вашу программу из командной оболочки, введя:

То стартовым каталогом будет текущий каталог командной оболочки. Однако если вы используете интегрированную среду разработки, то стартовый каталог определяется этой средой.

Вы можете определить расположение стартового каталога следующим вызовом:

Если вы испытываете трудности, связанные с нахождением файлов, попробуйте применять абсолютные путевые имена наподобие «c:\\mydirectory\myfile.txt» или «/home/me/mydirectory/myfile.txt«.

Как видите, вы можете обращаться к файлами как же легко, как используете System.in и System.out. Правда, здесь есть одна ловушка: если вы конструируете Scanner с файлом, который еще не существует, либо PrintWriter с именем файла, который не может быть создан, возникает исключение. Компилятор Java рассматривает эти исключения как более серьезные, чем например исключение «деления на ноль».

Как избегать все это? Да очень просто. Это делается посредством оснащения метода main() конструкцией throws, как показано ниже:

Теперь вы знаете, как читать и записывать в файлы, содержащие текстовую информацию.