koss-null / java-advanced-2018-autumn

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

This program is starting using makefile.

Use targets: make clean all

To compile and run the program

java-advanced-2018-autumn

Задание 1

На вход подаётся

  1. входной файл в котором содержится список папок для обхода
  2. выходной файл в который нужно записать хеши полученные в процессе обхода всех директорий

java Walker <input> <output>

Формат строчек в файле с хешами

хеш-файла путь_до_файла

Считать хеш следует только у папок и обычных (regular) файлов.

Если файл не подходящий или его не удалось прочитать, то его хеш равен 00000000.

Хеш следует считать с помощью ru.ifmo.task1.utils.HashUtils#calculate, предварительно дописав недостающую функциональность.

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

Скрипт для запуск на linux - run1.sh

./run1.sh <input> <output>

Задание 2

ru.ifmo.task2.Terminal

На вход, как аргумент командной строки, подаётся путь до корневой директории (возможно некорректный) от которой следует начать строить вируальную файловую систему вниз по иерархии.

Программа должна

  1. Подписаться на изменения корневой папки и всех остальных что ниже по иерархии
  2. Следить за изменениями и в соответствии с ними изменять виртуальную файловую систему, а также выводить в System.out произошедшее изменение
  3. Слушать команды получаемые в System.in и выводить в System.out результат выполнения команды
  4. Если при выполнении программы произошла ошибка, то выводить её в понятной для стороннего пользователя форме

Список команд

  1. cd <path_to> // Изменить текущую директорию, но нельзя переместиться выше корневой
  2. mv <source_file> <target_file> // Переместить файл в другое место / Перезаписать <target_file>
  3. cp <source_file> <target_file> // Скопировать файл в другое место
  4. mkdir <directory_name> // Создать директорию / несколько директорий
  5. rm <target_file/directory> // Удалить файл / директорию
  6. ls [name/size/mod(+-)] // Вывести список файлов в текущей директории
  7. info <target_file/directory> // Вывести информацию о файле / папке

Формат команды ls

  • Без аргументов — Вывести info всех файлов в текущей директории через символ перевода строки
  • Аргументы name/size/mod означают что файлы предварительно следует отсортировать (в виртуальной ФС) и сохранить их порядок
    • Если после ls +name вызвать просто ls, то порядок сортировки должен сохраниться
    • '+' значит что сортировать следует от большего к меньшему, '-' что от меньшему к большему
    • аргументов можно передать несколько. ls name+ size- - значит сначала файлы следует отсортировать по имени, а затем по размеру. Сортировка должна быть стабильной
  • name - -//- в лексиграфическом порядке относительно имени
  • size - -//- по размеру
  • mod - -//- по дате последнего изменения

Формат команды info

  • Название файла
  • Размер от Гб до байтов (2G 16M 76Kb 123b)
  • Параметры доступа (r+w-x+) — '+' если можно, '-''если нельзя
  • Дата последний модификации (23.09.2018 13:32) — DD.MM.YYYY MM:YY
  • Выводить параметры следует через три символа ' : '

Общие ограничения

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

About


Languages

Language:Java 89.6%Language:Makefile 8.8%Language:Shell 1.6%