Книга: Основы программирования с Java
Назад: Работа со строками
Дальше: Пример использования Scanner

File IO

Программы, которые мы писали до сих пор, в основном полагались на консольный ввод-вывод. И это часто не очень эффективно, если нужно иметь дело с большим количеством входных данных.

Например, информация о всех студентах в классе, где может быть более 100 студентов.

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

Бывает и так, часто, когда при завершении работы программы, которая производит некоторые результаты, результаты должны быть где-нибудь сохранены.

Все это является хорошей причиной для использования файлов, которые могут быть сохранены на некотором постоянном носителе, например, жестком диске в нашем компьютере.

Итак, что представляет собой файл?

Мы используем файлы все время.

Мы используем программное обеспечение для обработки текста, чтобы создать документы и отчеты, которые будут храниться в виде файлов.

Изображения, которые мы использовали, хранятся в файлах.

Программный интерфейс File IO, который мы собираемся использовать здесь, имеет дело только с простыми текстовыми файлами.





Это пример текстового файла, содержащего список имен.

Это может быть список имен студентов в классе.

Тип файлов здесь – .txt, и имя конкретно этого файла studentnames.txt.

Как вы можете видеть из этого примера, данные, хранящиеся в этом файле, организованы построчно и на каждой строке содержится последовательность символов.

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

Когда имеешь дело с файлом, первый шаг, как правило, это открыть файл, если файл уже существует, или создать файл, если файл еще не создан.

После того, как файл открыт, тогда следующим шагом является чтение данных или запись данных в файл.

Важным шагом является закрыть файл, когда использование файла завершено.

Способом открыть файл в Java является связывание некоторого объекта с файлом.







Чтобы установить соответствие между объектом и файлом, мы будем использовать классы File/PrintWriter/Scanner.

Это заранее определенные классы в Java, и для того, чтобы использовать их, мы должны включить соответствующие библиотеки.

Пакет java.io содержит много классов, которые можно использовать для программ с вводом и выводом данных.

Это пакеты, которые должны быть импортированы в начале вашей программы.

Работа с File IO может сопровождаться ошибками.

Пользователь может ввести неправильное имя файла или может не иметь права доступа к файлу.

Также может быть проблема с устройствами хранения данных, например, диск может быть полностью заполнен.

Поэтому, при выполнении File IO, необходима обработка исключений или ошибок.

И правильным способом обработки исключений является использование блока try-catch в виде, приведенном здесь.







Однако, обработка исключений, выходит за рамки данного курса.

Одним из способов обхода обработки исключений является добавление «throws IOexception» после заголовка метода, когда файловый ввод/вывод выполняется в методе.







Это будет информировать вызывающего метод, что вызываемый метод может выбрасывать исключение, и позволить вызывающему методу принять решение о том, как с ним обращаться.

Давайте сначала обсудим ввод данных из файла с помощью класса Scanner.







Способ, с помощью которого Java открывает файл, это связать объект с файлом.

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







После того, как устанавливается соответствие, объект Scanner может быть создан с помощью объекта файла.

После того, как файл открыт, следующим шагом является чтение данных из файла.

Мы сначала сосредоточимся на чтении данных из файла, строка за строкой.

Важно закрыть файл с помощью метода close, когда вы закончите работать с файлом, в противном случае, могут быть некоторые нежелательные последствия, такие как утечка памяти.

Scanner прерывает свой ввод последовательностей лексем в соответствии с конкретными правилами, используя шаблон разделителя, по умолчанию, пробел используется в качестве разделителя для лексем.

Scanner обеспечивает методы для преобразования вводимого текста в соответствующие типы Java, в том числе примитивные типы и тип String.

Вот некоторые из полезных методов в классе Scanner.







Здесь есть методы для чтения содержимое из файла, в том числе метод nextLine(), который возвращает следующую линию строки.

Метод next() возвращает следующую строку.

Вернее next() может читать ввод только до пробела.

Этот метод не может читать два слова, разделенных пробелом.

Кроме того, метод next() помещает курсор в ту же строку после прочтения ввода.

Метод nextLine() считывает ввод, включая пробел между словами (то есть, он читает до конца строки \n). После считывания ввода метод nextLine() позиционирует курсор в следующей строке.

Методы nextInt() и nextDouble() читают следующую строку, а затем преобразовывают ее в целое, если nextInt() используется,

и число с плавающей точкой, если метод nextDouble() используется.

Другие методы здесь проверяют наличие контента в файле.

Метод hasNextLinе() возвращает true, если следующая строка существует.

Метод hasNext() возвращает true, если еще есть следующая строка.

Методы hasNextInt() и hasNextDouble() возвращают true, если еще есть целое или число с плавающей запятой в файле.

Назад: Работа со строками
Дальше: Пример использования Scanner