Работа с файлами в Java. FileWriter и FileReader
*Это Говард Стивен Берг (Howard Stephen Berg), один из самых быстро читающих людей в мире 🙂 А FileWriter - Уильям Шекспир.
Данная статья:
- написана командой Vertex Academy. Надеемся, что она Вам будет полезна. Приятного прочтения!
- это одна из статей из нашего "Самоучителя по Java"
Рассмотрим работу с FileWriter и FileReader:
- с помощью FileWriter мы можем создавать файлы
- с помощью FileReader - считывать их
Внимание:
Потоки FileWriter и FileReader немного отличаются от того, с чем мы встречались ранее. Работая с ними, понадобится всегда помнить 3 важных момента:
1. Объявление
Перед тем, как вызывать какие-нибудь методы для работы с файлами, нужно объявить FileWriter/FileReader:
или
Но Eclipse может не распознать FileReader/FileWriter и начнет ругаться. Если такое произойдет, посмотрите, импортировали ли вы библиотеку java.io.*. Для этого в самой первой строчке напишите:
1 |
import java.io.*; |
2. Нужно закрыть поток
FileWriter/FileReader - это потоки, их нужно не только «открыть» (то-есть объявить), но и «закрыть». Представьте, что Вы открыли кран. Нельзя же уйти из дому, оставив воду литься?
Это правило работает и для других потоков - кроме стандартных System.in и System.out.
Закрыть поток можно с помощью .close():
или
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.io.*; class Test { public static void main(String[] args) throws Exception { FileWriter fw = new FileWriter( "sample1.txt" ); fw.close(); FileReader fr = new FileReader( "sample2.txt" ); fr.close(); } } |
3. Допишите "волшебную фразу".
В программировании очень важна безопасность. А работа с FileWriter/FileReader - это небезопасно, в процессе может возникнуть масса разных ошибок. Это беспокоит Eclipse (или IntellijIdea - смотря чем пользуетесь), и программу она просто так не запустит. Помните, что к методу нужно дописать «throws Exception»:
Итак, еще раз акцентируем внимание - всегда Вы должны помнить о 3 моментах:
- Объявить
- Не забыть закрыть поток
- Дописать «throws Exception»
Замомнили? 🙂
И еще, потоки FileWriter и FileReader воспринимают все файлы как текстовые:
FileWriter
Теперь представим, что Вы начинаете использовать FileWriter.
1. Объявление.
Как Вы помните, нужно не забыть импортировать библиотеки java.io.* и дописать "волшебную фразу" к методу, где Вы собираетесь объявить FileWriter.
Объявляем, как помните, почти как Scanner:
Объявили. А что теперь можно делать? Теперь пора пользоваться возможностями FileWriter!
Основной метод FileWriter - это метод .write().
Мало? Да, но посмотрите, как много с ним можно сделать:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.io.*; public class Test { public static void main(String[] args) throws Exception { int k1 = 2; int k2 = 9; newFile( k1, k2); } public static void newFile(int k1, int k2) throws Exception { FileWriter nFile = new FileWriter("file1.txt"); for(int i = k1; i <= k2; i++) { nFile.write(i); } nFile.close(); } } |
*обратите внимание - мы написали нашу "волшебную фразу" и в методе main, и в методе newFile.
Так мы можем записать числа от k1 до k2, от 2 до 9, в наш файл file1.txt. Можно записывать только четные или нечетные числа, какой-нибудь текст, и многое другое.
2. Переход на следующую строку
Но мы Вам кое-чего не сказали. Если запустить код из прошлого пункта, получится:
Если понадобится вывести числа в столбик, понадобится добавить "\n" от "new line", новая строка. Запишем в файл стих:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.io.FileWriter; public class Test { public static void main(String[] args) throws Exception { FileWriter nFile = new FileWriter("file1.txt"); nFile.write("Хокку \nПодобен лучу самурайский клинок \nИ тот затупился \nПроклятая килька в томате!!"); nFile.close(); } } |
Получим:
Каждый раз, когда мы хотели, чтобы программа переходила на новую строку, мы ставили "\n":
Теперь вы знаете, как вывести числа с новой строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import java.io.*; public class Test { public static void main(String[] args) throws Exception { int k1 = 2; int k2 = 9; newFile( k1, k2); } public static void newFile(int k1, int k2) throws Exception { FileWriter nFile = new FileWriter("file1.txt"); for(int i = k1; i <= k2; i++) { nFile.write(i+"\n"); } nFile.close(); } } |
3. Закрываем поток
После того, как Вы записали все необходимое, нужно не забыть закрыть поток. Это мы делали в каждом из приведенных примеров:
FileReader
Теперь, рассмотрим пошагово работу с FileReader.
1. Объявление
Сначала FileReader, как и FileWriter, нужно объявить. Не забудьте про библиотеку и "волшебную фразу":
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import java.io.FileReader; import java.util.Scanner; public class Test { public static void main(String[] args) throws Exception { FileReader fr= new FileReader("file1.txt"); Scanner scan = new Scanner(fr); fr.close(); } } |
2. FileReader + Scanner
Мы объявили не только FileReader, но и Scanner. Почему?
В отличии от FileWriter, FileReader не используется один:
Не вдаваясь в подробности, запомните, что FileReader и Scanner идут вместе. Но не забывайте их "связать" - для этого напишите название вашего объекта FileReader вместо "System.in" при объявлении Scanner:
3. Методы
Тут уже больше методов. Рассмотрим методы .nextLine() и .hasNextLine().
- .nextLine() - это метод, который считывает строку (до ENTER), и возвращает это значение
- .hasNextLine() - метод, который возвращает boolean - true или false, показывая, есть ли следующая строка.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import java.io.FileReader; import java.util.Scanner; public class Test { public static void main(String[] args) throws Exception { FileReader fr= new FileReader("file1.txt"); Scanner scan = new Scanner(fr); int i = 1; while (scan.hasNextLine()) { System.out.println(i + " : " + scan.nextLine()); i++; } fr.close(); } } |
Должен быть такой результат:
Обратите внимание: мы используем .hasNextLine() для того, чтобы избежать ошибки, и не заставлять .nextLine() считывать строку, которой не существует:
4. Закрываем поток.
Закрываем поток:
Готово. Теперь Вы знаете, как работать с FileWriter и FileReader.
Надеемся, что наша статья была Вам полезна. Также есть возможность записаться на наши курсы по Java в Киеве. Обучаем с нуля. Детальную информацию Вы можете найти у нас на сайте.