- Работа с файлами и сетью
9.1. Класс File
9.2. Чтение файлов с помощью FileInputStream
9.3. Чтение файлов с помощью BufferedReader
9.4. Чтение файлов с помощью класса Files
9.5. Домашняя работа 9.1
9.6. Запись в файл
9.7. Домашняя работа 9.2
9.8. Табличные файлы
9.9. Домашняя работа 9.3
9.10. Структура XML и HTML-файлов
9.11. Парсинг HTML-файлов
9.12. Домашняя работа 9.4
9.13. Формат JSON и парсинг JSON файлов
9.14. Домашняя работа 9.5
9.15. Конфигурационные файлы
EXAMPLE_9_1: DocParser (9.11. Парсинг HTML-файлов)
EXAMPLE_9_2: FilesExample (9.1. Класс File; 9.2. Чтение файлов с помощью FileInputStream; 9.3. Чтение файлов с помощью BufferedReader; 9.4. Чтение файлов с помощью класса Files; 9.6. Запись в файл)
EXAMPLE_9_3: PropertiesExample (9.15. Конфигурационные файлы)
TASK_9_1: FolderSize
TASK_9_2: FolderCopy
TASK_9_3: BankStatement
TASK_9_4: ImageDownloader
TASK_9_5: MosMetroParser
Цель задания
Научиться читать файлы, папки и их свойства.
Что нужно сделать
Напишите программу. Она должна:
- получать через консоль путь от пользователя до папки;
- суммировать размер файлов папки и вложенных папок;
- выводить полученную сумму файлов в удобочитаемом виде — в байтах, килобайтах, мегабайтах или гигабайтах;
- программа должна перехватывать все исключения, возникающие при ошибках чтения файлов и папок, и выводить сообщение об ошибке с трассировкой стека (stack trace).
Примеры работы программы
Введите путь до папки:
D:\Games
Размер папки D:\Games cоставляет 56,6 Гб
Решение
TASK_9_1: FolderSize
Критерии оценки
«Зачёт» — программа выводит размер папки в удобочитаемом формате.
«Незачёт» — задание не выполнено.
Цель задания
Научиться копировать файлы и папки.
Что нужно сделать
- Напишите код, который копирует одну указанную папку в другую. При копировании должны сохраниться файлы и структура папки.
- Папки запрашивайте у пользователя в консоли.
- Программа должна перехватывать все исключения, возникающие при ошибках чтения файлов и папок, и выводить сообщение об ошибке с трассировкой стека (stack trace).
Решение
TASK_9_2: FolderCopy
Критерии оценки
«Зачёт» — программа копирует содержимое папок.
«Незачёт» — задание не выполнено.
Цель задания
Научиться читать файл CSV и анализировать его.
Что нужно сделать
-
Создать новый проект, который будет читать файл csv банковской выписки movementsList.csv и парсить полученные строки. Путь к файлу выписки храните в константе.
-
Код должен выводить сводную информацию по этой выписке: общий приход, общий расход и разбивку расходов.
-
Примеры работы программы
Сумма расходов: 398 563.39 руб. Сумма доходов: 289 890.06 руб. Суммы расходов по организациям: RUSMOSKVA56 SHLOVE REPUBLIC 1 081.53 руб. RUSMOSCOW42 SHCL ETOILE 126.34 руб. RUSPUSHKINO105ZOOMAGAZIN 4 217.65 руб.
Решение
TASK_9_3: BankStatement
Критерии оценки
«Зачёт» — после запуска программы в консоль выводятся суммы и расходы по организациям.
«Незачёт» — задание не выполнено.
Цель задания
Научиться получать изображения с сайта парсингом, используя библиотеку jsoup.
Что нужно сделать
Напишите программу, которая:
- получает с помощью библиотеки jsoup HTML-код страницы https://lenta.ru;
- находит в HTML-коде теги img и получает абсолютные ссылки на изображения из атрибута src;
- скачивает изображения в папку images проекта, при этом сохраняя оригинальные названия файлов;
- выводит в консоль список c названиями скачанных файлов.
Рекомендации
-
Все варианты подключения библиотеки jsoup в проект на странице скачивания библиотеки
-
Для получения ссылок воспользуйтесь префиксом abs при получении атрибута src у тега img. Пример из официальной документации.
TASK_9_4: ImageDownloader
Критерии оценки
«Зачёт» — программа скачивает изображения с главной страницы lenta.ru.
«Незачёт» — задание не выполнено.
Цель задания
Научиться получать данные из HTML-страницы, создавать и читать JSON-файлы.
Что нужно сделать
Напишите программу, которая:
1. Получает HTML-код страницы «Список станций Московского метрополитена» https://www.moscowmap.ru/metro.html#lines с помощью библиотеки jsoup.
2. Парсит полученную страницу и получает из неё:
- Линии московского метро (получаете имя линии, номер линии, цвет парсить не надо).
- Станции московского метро (получаете имя станции, номер линии).
3. Создаёт и записывает на диск JSON-файл со списком станций по линиям и списком линий по формату JSON-файла из проекта SPBMetro (файл map.json).
4. Читает файл и выводит в консоль количество станций на каждой линии.
Рекомендации
- По умолчанию Jsoup читает 2 Мб данных с запрашиваемой страницы. Чтобы снять это ограничение, необходимо добавить вызов метода
maxBodySize(0)
, устанавливающий максимальное значение получаемых данных:
Document doc = Jsoup.connect(URL).maxBodySize(0).get();
значение 0 означает, что нет ограничений на принимаемый объём данных.
- При изучении кода страницы удобно использовать консоль разработчика в браузере. Для этого нажмите F12, перейдите во вкладку Elements и найдите тег
<div id="metrodata">
. В нём содержатся таблицы с линиями, станциями и пересадками. Обращайте внимание на классы, напишите селекторы на основе найденных классов. Посмотрите, как получать элементы по селекторам в документации JSoup. - Для более быстрого поиска нужных селекторов используйте онлайн сервис jsoup https://try.jsoup.org/
TASK_9_5: MosMetroParser
Критерии оценки
«Зачёт» — программа получает данные с сайта, записывает в файл и выводит информацию о количестве станций на линиях.
«Незачёт» — задание не выполнено.
Дополнительное задание*
Цель задания
Потренироваться в работе с библиотекой jsoup и формированием JSON-файлов.
Что нужно сделать
- Пропарсите и записывайте в JSON-файл переходы между станциями в дополнение к линиям и станциям (коллекции имя станции, номер линии, между которым есть переходы).
- Выведите в консоль количество переходов в метро.
TASK_9_5: MosMetroParser
Критерии оценки
«Зачёт» — в консоль выводится количество переходов в московском метро.
«Незачёт» — задание не выполнено.