Чтобы прочитать из файла, сконструируйте объект Scanner из объекта File, как показано ниже:
1 |
Scanner in = new Scanner(new File("myfile.txt")); |
Если имя файла содержит в себе обратные косые черты, не забудьте защитить их дополнительными обратными косыми чертами: «c:\\mydirectory\\myfile.txt«.После этого вы можете выполнять чтение из файла, используя любые методы Scanner, которые мы описали выше.
Чтобы выполнить запись в файл, сконструируйте объект PrintWriter. В конструкторе просто укажите имя файла:
1 |
PrintWriter out = new PrintWriter("myfile.txt"); |
Если файл еще не существует, вы можете просто использовать команды print, println и printf, как вы поступали, осуществляя вывод в System.out.
Вы можете сконструировать Scanner со строковым параметром, но при этом сканер интерпретирует эту строку как данные, а не как имя файла. Например, если вы вызовете конструктор так, как показано ниже, то Scanner увидит символы ‘m‘, ‘y‘, ‘f‘ и так далее. Вероятно, это не то, что вы подразумевали.
1 |
Scanner in = new Scanner("myfile.txt"); // Ошибка? |
Когда вы специфицируйте относительное имя файла, такое как «myfile.txt«, «mydirectory/myfile.txt» или «../myfile.txt«, то файл ищется относительно каталога, в котором была запущена виртуальная машина Java. Если вы запустили вашу программу из командной оболочки, введя:
1 |
java MyProg |
То стартовым каталогом будет текущий каталог командной оболочки. Однако если вы используете интегрированную среду разработки, то стартовый каталог определяется этой средой.
Вы можете определить расположение стартового каталога следующим вызовом:
1 |
String dir = System.getProperty("user.dir"); |
Если вы испытываете трудности, связанные с нахождением файлов, попробуйте применять абсолютные путевые имена наподобие «c:\\mydirectory\myfile.txt» или «/home/me/mydirectory/myfile.txt«.
Как видите, вы можете обращаться к файлами как же легко, как используете System.in и System.out. Правда, здесь есть одна ловушка: если вы конструируете Scanner с файлом, который еще не существует, либо PrintWriter с именем файла, который не может быть создан, возникает исключение. Компилятор Java рассматривает эти исключения как более серьезные, чем например исключение «деления на ноль».
Как избегать все это? Да очень просто. Это делается посредством оснащения метода main() конструкцией throws, как показано ниже:
1 2 3 4 |
public static void main(String[] args) throws FileNotFoundsException { Scanner in = new Scanner(new File("myfile.txt")); ...} |
Теперь вы знаете, как читать и записывать в файлы, содержащие текстовую информацию.