Skip to content

Latest commit

 

History

History

m09-working-with-files-and-the-network

Программа модуля

  1. Работа с файлами и сетью
    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


9.5. Домашняя работа 9.1

Цель задания

Научиться читать файлы, папки и их свойства.

Что нужно сделать

Напишите программу. Она должна:

  • получать через консоль путь от пользователя до папки;
  • суммировать размер файлов папки и вложенных папок;
  • выводить полученную сумму файлов в удобочитаемом виде — в байтах, килобайтах, мегабайтах или гигабайтах;
  • программа должна перехватывать все исключения, возникающие при ошибках чтения файлов и папок, и выводить сообщение об ошибке с трассировкой стека (stack trace).

Примеры работы программы

Введите путь до папки:
D:\Games
Размер папки D:\Games cоставляет 56,6 Гб

Решение

TASK_9_1: FolderSize

Критерии оценки

«Зачёт» — программа выводит размер папки в удобочитаемом формате.
«Незачёт» — задание не выполнено.


9.7. Домашняя работа 9.2

Цель задания

Научиться копировать файлы и папки.

Что нужно сделать

  • Напишите код, который копирует одну указанную папку в другую. При копировании должны сохраниться файлы и структура папки.
  • Папки запрашивайте у пользователя в консоли.
  • Программа должна перехватывать все исключения, возникающие при ошибках чтения файлов и папок, и выводить сообщение об ошибке с трассировкой стека (stack trace).

Решение

TASK_9_2: FolderCopy

Критерии оценки

«Зачёт» — программа копирует содержимое папок.
«Незачёт» — задание не выполнено.


9.9. Домашняя работа 9.3

Цель задания

Научиться читать файл CSV и анализировать его.

Что нужно сделать

  1. Создать новый проект, который будет читать файл csv банковской выписки movementsList.csv и парсить полученные строки. Путь к файлу выписки храните в константе.

  2. Код должен выводить сводную информацию по этой выписке: общий приход, общий расход и разбивку расходов.

  3. Примеры работы программы

     Сумма расходов: 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

Критерии оценки

«Зачёт» — после запуска программы в консоль выводятся суммы и расходы по организациям.
«Незачёт» — задание не выполнено.


9.12. Домашняя работа 9.4

Цель задания

Научиться получать изображения с сайта парсингом, используя библиотеку jsoup.

Что нужно сделать

Напишите программу, которая:

  • получает с помощью библиотеки jsoup HTML-код страницы https://lenta.ru;
  • находит в HTML-коде теги img и получает абсолютные ссылки на изображения из атрибута src;
  • скачивает изображения в папку images проекта, при этом сохраняя оригинальные названия файлов;
  • выводит в консоль список c названиями скачанных файлов.

Рекомендации

TASK_9_4: ImageDownloader

Критерии оценки

«Зачёт» — программа скачивает изображения с главной страницы lenta.ru.
«Незачёт» — задание не выполнено.


9.14. Домашняя работа 9.5

Цель задания

Научиться получать данные из 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-файлов.

Что нужно сделать

  1. Пропарсите и записывайте в JSON-файл переходы между станциями в дополнение к линиям и станциям (коллекции имя станции, номер линии, между которым есть переходы).
  2. Выведите в консоль количество переходов в метро.

TASK_9_5: MosMetroParser

Критерии оценки

«Зачёт» — в консоль выводится количество переходов в московском метро.
«Незачёт» — задание не выполнено.