Created
March 21, 2023 12:42
-
-
Save Sibiryaq/c5cc0fcace5bb693c7ebbf9318e0bd3f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package logic; | |
| import exceptions.*; | |
| import tasks.*; | |
| import java.io.File; | |
| import java.io.FileWriter; | |
| import java.io.IOException; | |
| import java.io.Writer; | |
| import java.nio.file.Files; | |
| import java.nio.file.Path; | |
| import java.nio.file.Paths; | |
| import java.util.ArrayList; | |
| import java.util.HashMap; | |
| import java.util.List; | |
| public class FileBackedTasksManager extends InMemoryTaskManager { //спринт 6. класс для второй реализации менеджера, автосохранение в файл | |
| private final File file; | |
| public FileBackedTasksManager(File file) { | |
| this.file = file; | |
| file = new File(file.toURI()); | |
| // if (!file.isFile()) { | |
| try { | |
| Path path = Files.createFile(Paths.get(file.toURI())); | |
| } catch (IOException e) { | |
| throw new ManagerCreateException("Ошибка создания файла."); | |
| } | |
| // } | |
| } | |
| // 1.удалил файл, запустил - создался новый файл, все работает как надо | |
| // 2.удалил файл, закоммитил if который выше, файл создался, первая половина кода выполнилась, но вылезла ошибка на моменте | |
| // создания второго менеджера на основе файла первого экземпляра. Ошибка создания файла | |
| // at logic.FileBackedTasksManager.<init>(FileBackedTasksManager.java:28) | |
| // at logic.FileBackedTasksManager.loadFromFile(FileBackedTasksManager.java:90) | |
| // at logic.FileBackedTasksManager.main(FileBackedTasksManager.java:78) | |
| // 3. запустил еще раз, теперь сразу ошибка, которая видна на скрине, что делать? | |
| //Метод для проверки работы менеджера | |
| public static void main(String[] args) { | |
| FileBackedTasksManager manager = new FileBackedTasksManager(new File("data/data.csv")); | |
| FileBackedTasksManager manager1; | |
| //Заведение нескольких разных задач, эпиков и подзадач. | |
| manager.taskCreator(new Task("Задача №1", "Описание задачи 1", TaskStatus.NEW)); | |
| manager.taskCreator(new Task("Задача №2", "Описание задачи 2", TaskStatus.NEW)); | |
| Epic epic1 = new Epic("Эпик №1", "С тремя подзадачами"); //3 | |
| manager.epicCreator(epic1); | |
| Subtask subtask11 = new Subtask("Подзадача № 1", "Описание подзадачи 1", TaskStatus.DONE, epic1); | |
| manager.subtaskCreator(subtask11); | |
| Subtask subtask12 = new Subtask("Подзадача № 2", "Описание подзадачи 2", TaskStatus.IN_PROGRESS, epic1); | |
| manager.subtaskCreator(subtask12); | |
| Subtask subtask13 = new Subtask("Подзадача № 3", "Описание подзадачи 3", TaskStatus.NEW, epic1); | |
| manager.subtaskCreator(subtask13); | |
| Epic epic2 = new Epic("Эпик №2", "Без подзадач"); //7 | |
| manager.epicCreator(epic2); | |
| //Вывод списка задач | |
| System.out.println("\n Cозданные Эпики : \n" + manager.getEpics()); | |
| System.out.println("\n Созданные Задачи : \n" + manager.getTasks()); | |
| System.out.println("\n Созданные Подзадачи : \n" + manager.getSubtasks()); | |
| System.out.println("Всего создано задач - " + (manager.getTasks().size() + manager.getSubtasks().size() + manager.getEpics().size())); | |
| //Запрос некоторых задач, чтобы заполнилась история просмотра. | |
| System.out.println("\n Запрос рандомной задачи : \n" + manager.getTaskById(1)); | |
| System.out.println("\nЗапрос рандомной задачи : \n" + manager.getTaskById(2)); | |
| System.out.println("\nЗапрос рандомного эпика : \n" + manager.getEpicById(3)); | |
| System.out.println("\nЗапрос рандомного эпика : \n" + manager.getEpicById(7)); | |
| System.out.println("\nЗапрос рандомной задачи : \n" + manager.getTaskById(1)); //второй раз, для проверки дублирования | |
| System.out.println("\nЗапрос рандомной задачи : \n" + manager.getSubtaskById(4)); //второй раз, для проверки дублирования | |
| //Просмотр истории обращения к задачам | |
| System.out.println("Показать историю : \n" + manager.history()); | |
| System.out.println("\n----------Создание второго менеджера на основе файла первого экземпляра."); | |
| // Создание нового FileBackedTasksManager менеджера из этого же файла. | |
| manager1 = loadFromFile(Paths.get("data/data.csv").toFile()); | |
| // Вывод списка задач | |
| System.out.println("\n Cозданные Эпики : \n" + manager1.getEpics()); | |
| System.out.println("\n Созданные Задачи : \n" + manager1.getTasks()); | |
| System.out.println("\n Созданные Подзадачи : \n" + manager1.getSubtasks()); | |
| System.out.println("Всего создано задач - " + (manager1.getTasks().size() + manager1.getSubtasks().size() + manager1.getEpics().size())); | |
| System.out.println("\nСписок обращений к задачам после загрузки из файла:"); | |
| System.out.println("Показать историю : \n" + manager1.history()); | |
| } | |
| public static FileBackedTasksManager loadFromFile(File file) { | |
| FileBackedTasksManager fileBackedTasksManager = new FileBackedTasksManager(file); | |
| try { | |
| String data = Files.readString(Path.of(file.getAbsolutePath())); | |
| String[] lines = data.split("\n"); | |
| boolean isTitle = true; | |
| boolean itsTask = true; | |
| int maxId = 0; | |
| int id; | |
| for (String line : lines) { | |
| if (isTitle) { | |
| isTitle = false; | |
| continue; | |
| } | |
| if (line.isEmpty() || line.equals("\r")) { | |
| itsTask = false; | |
| continue; | |
| } | |
| if (itsTask) { | |
| TaskType taskType = TaskType.valueOf(line.split(",")[1]); | |
| switch (taskType) { | |
| case EPIC: | |
| Epic epic = (Epic) fromString(line, TaskType.EPIC, fileBackedTasksManager); | |
| if (epic != null) { | |
| id = epic.getId(); | |
| if (id > maxId) { | |
| maxId = id; | |
| } | |
| fileBackedTasksManager.epicHashMap.put(id, epic); | |
| } | |
| break; | |
| case SUBTASK: | |
| Subtask subtask = (Subtask) fromString(line, TaskType.SUBTASK, fileBackedTasksManager); | |
| if (subtask != null) { | |
| id = subtask.getId(); | |
| if (id > maxId) { | |
| maxId = id; | |
| } | |
| fileBackedTasksManager.subtaskHashMap.put(id, subtask); | |
| } | |
| break; | |
| case TASK: | |
| Task task = fromString(line, TaskType.TASK, fileBackedTasksManager); | |
| if (task != null) { | |
| id = task.getId(); | |
| if (id > maxId) { | |
| maxId = id; | |
| } | |
| fileBackedTasksManager.taskHashMap.put(id, task); | |
| } | |
| break; | |
| } | |
| } else { | |
| List<Integer> ids = fromString(line); | |
| for (Integer taskId : ids) { | |
| fileBackedTasksManager.historyManager.addToHistory(getTaskAllKind(taskId, fileBackedTasksManager)); | |
| } | |
| } | |
| } | |
| fileBackedTasksManager.idGenerator = maxId; | |
| } catch (IOException e) { | |
| throw new ManagerSaveException("Ошибка чтения файла."); | |
| } | |
| return fileBackedTasksManager; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment