Skip to content

Instantly share code, notes, and snippets.

@Sibiryaq
Created March 21, 2023 12:42
Show Gist options
  • Select an option

  • Save Sibiryaq/c5cc0fcace5bb693c7ebbf9318e0bd3f to your computer and use it in GitHub Desktop.

Select an option

Save Sibiryaq/c5cc0fcace5bb693c7ebbf9318e0bd3f to your computer and use it in GitHub Desktop.
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