Skip to content

Commit 7628ce8

Browse files
committed
Add save task list to hard disk function
Existing ask list is able to be reflected in duke when restarted.
1 parent 2008de1 commit 7628ce8

File tree

6 files changed

+198
-27
lines changed

6 files changed

+198
-27
lines changed

src/main/java/Deadline.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import java.util.List;
2+
13
public class Deadline extends Task {
24
private final String taskType;
35
private final String taskDeadline;
@@ -36,8 +38,8 @@ public void printDeadlineTask() {
3638
}
3739

3840
@Override
39-
public void printDelete() {
40-
int newTotalNumOfTasks = super.totalNumOfTasks - 1;
41+
public void printDelete(List<Task> allTasks) {
42+
int newTotalNumOfTasks = allTasks.size() - 1;
4143
System.out.println("\t____________________________________________________________" +
4244
"\n\t Noted. I've removed this task:" +
4345
"\n\t " + this.taskType +

src/main/java/Duke.java

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import java.io.*;
12
import java.util.Scanner;
23
import java.util.ArrayList;
34
import java.util.List;
@@ -6,7 +7,7 @@ public class Duke {
67

78
Scanner sc = new Scanner(System.in);
89

9-
public static void main(String[] args) {
10+
public static void main(String[] args) throws DukeException, IOException {
1011
String logo = " ____ _ \n"
1112
+ "| _ \\ _ _| | _____ \n"
1213
+ "| | | | | | | |/ / _ \\\n"
@@ -18,16 +19,16 @@ public static void main(String[] args) {
1819
duke.chatDuke();
1920
}
2021

21-
public void chatDuke() {
22+
public void chatDuke() throws IOException {
2223

23-
List<Task> allTasks = new ArrayList<>();
24+
Save save = new Save();
25+
List<Task> allTasks = save.loadTxtFile();
2426

2527
this.printGreetingMessage();
2628

2729
boolean saidBye = false;
2830
while (!saidBye) {
2931
String command = sc.nextLine();
30-
3132
try {
3233
if (command.equals("list")) {
3334
this.printCommandList(allTasks);
@@ -43,21 +44,24 @@ public void chatDuke() {
4344
allTasks.size());
4445
allTasks.set(taskIndex, todo);
4546
todo.markAsDone();
47+
save.saveListToFile(command, todo, allTasks);
4648
} else if (oldTask.getTaskType().equals("[D]")) {
4749
Deadline deadline = new Deadline(oldTask.getTaskNumber(),
4850
true, oldTask.getTask(),
4951
oldTask.getDeadline(), allTasks.size());
5052
allTasks.set(taskIndex, deadline);
5153
deadline.markAsDone();
54+
save.saveListToFile(command, deadline, allTasks);
5255
} else if (oldTask.getTaskType().equals("[E]")) {
5356
Event event = new Event(oldTask.getTaskNumber(),
5457
true, oldTask.getTask(),
5558
oldTask.getEventStartTime(),
5659
oldTask.getEventEndTime(), allTasks.size());
5760
allTasks.set(taskIndex, event);
5861
event.markAsDone();
62+
save.saveListToFile(command, event, allTasks);
5963
}
60-
} else if (command.startsWith("unmark")) {
64+
}else if (command.startsWith("unmark")) {
6165
missingIndexException(command);
6266
invalidIndexException(command, allTasks.size());
6367
String[] str = command.split(" ");
@@ -69,19 +73,22 @@ public void chatDuke() {
6973
allTasks.size());
7074
allTasks.set(taskIndex, todo);
7175
todo.unmarkAsUndone();
76+
save.saveListToFile(command, todo, allTasks);
7277
} else if (oldTask.getTaskType().equals("[D]")) {
7378
Deadline deadline = new Deadline(oldTask.getTaskNumber(),
7479
false, oldTask.getTask(),
7580
oldTask.getDeadline(), allTasks.size());
7681
allTasks.set(taskIndex, deadline);
7782
deadline.unmarkAsUndone();
83+
save.saveListToFile(command, deadline, allTasks);
7884
} else if (oldTask.getTaskType().equals("[E]")) {
7985
Event event = new Event(oldTask.getTaskNumber(),
8086
false, oldTask.getTask(),
8187
oldTask.getEventStartTime(),
8288
oldTask.getEventEndTime(), allTasks.size());
8389
allTasks.set(taskIndex, event);
8490
event.unmarkAsUndone();
91+
save.saveListToFile(command, event, allTasks);
8592
}
8693
} else if (command.startsWith("todo")) {
8794
emptyCommandException(command);
@@ -91,6 +98,7 @@ public void chatDuke() {
9198
taskName, allTasks.size() + 1);
9299
allTasks.add(todo);
93100
todo.printToDoTask();
101+
save.saveListToFile(command, todo, allTasks);
94102
} else if (command.startsWith("deadline")) {
95103
emptyCommandException(command);
96104
missingTimingException(command);
@@ -101,6 +109,7 @@ public void chatDuke() {
101109
taskName, taskDeadline, allTasks.size() + 1);
102110
allTasks.add(deadline);
103111
deadline.printDeadlineTask();
112+
save.saveListToFile(command, deadline, allTasks);
104113
} else if (command.startsWith("event")) {
105114
emptyCommandException(command);
106115
missingTimingException(command);
@@ -113,14 +122,16 @@ public void chatDuke() {
113122
taskName, eventStartTime, eventEndTime, allTasks.size() + 1);
114123
allTasks.add(event);
115124
event.printEventTask();
125+
save.saveListToFile(command, event, allTasks);
116126
} else if (command.startsWith("delete")) {
117127
missingIndexException(command);
118128
invalidIndexException(command, allTasks.size());
119129
String[] str = command.split(" ");
120130
int taskIndex = Integer.parseInt(str[1]) - 1;
121131
Task task = allTasks.get(taskIndex);
122-
task.printDelete();
132+
task.printDelete(allTasks);
123133
allTasks.remove(taskIndex);
134+
save.saveListToFile(command, task, allTasks);
124135
} else if (command.equals("bye")){
125136
saidBye = true;
126137
this.printByeMessage();
@@ -133,6 +144,8 @@ public void chatDuke() {
133144
System.out.println("\t____________________________________________________________" +
134145
"\n\t ☹ OOPS!!! The task index to delete or un/mark a task cannot be a non-integer." +
135146
"\n\t____________________________________________________________");
147+
} catch (IOException e) {
148+
throw new RuntimeException(e);
136149
}
137150
}
138151
}
@@ -205,18 +218,19 @@ public void missingTimingException(String command) throws DukeException {
205218
}
206219

207220
public void missingIndexException(String command) throws DukeException {
208-
if (command.equals("mark")) {
209-
throw new DukeException("\t____________________________________________________________" +
210-
"\n\t ☹ OOPS!!! The task index to mark a task as done cannot be empty." +
211-
"\n\t____________________________________________________________");
212-
} else if (command.equals("unmark")) {
213-
throw new DukeException("\t____________________________________________________________" +
214-
"\n\t ☹ OOPS!!! The task index to unmark a task as not done cannot be empty." +
215-
"\n\t____________________________________________________________");
216-
} else if (command.equals("delete")) {
217-
throw new DukeException("\t____________________________________________________________" +
218-
"\n\t ☹ OOPS!!! The task index to delete a task as not done cannot be empty." +
219-
"\n\t____________________________________________________________");
221+
switch (command) {
222+
case "mark":
223+
throw new DukeException("\t____________________________________________________________" +
224+
"\n\t ☹ OOPS!!! The task index to mark a task as done cannot be empty." +
225+
"\n\t____________________________________________________________");
226+
case "unmark":
227+
throw new DukeException("\t____________________________________________________________" +
228+
"\n\t ☹ OOPS!!! The task index to unmark a task as not done cannot be empty." +
229+
"\n\t____________________________________________________________");
230+
case "delete":
231+
throw new DukeException("\t____________________________________________________________" +
232+
"\n\t ☹ OOPS!!! The task index to delete a task as not done cannot be empty." +
233+
"\n\t____________________________________________________________");
220234
}
221235
}
222236

src/main/java/Event.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import java.util.List;
2+
13
class Event extends Task {
24
private final String taskType;
35
private final String eventStartTime;
@@ -17,7 +19,7 @@ public void markAsDone() {
1719
"\n\t Nice! I've marked this task as done:\n" +
1820
"\t " + this.taskType + "[X]" + " " + super.task +
1921
" (from: " + this.eventStartTime + " to: "
20-
+ this.eventEndTime +
22+
+ this.eventEndTime + ")" +
2123
"\n\t____________________________________________________________");
2224
}
2325

@@ -41,8 +43,8 @@ public void printEventTask() {
4143
}
4244

4345
@Override
44-
public void printDelete() {
45-
int newTotalNumOfTasks = super.totalNumOfTasks - 1;
46+
public void printDelete(List<Task> allTasks) {
47+
int newTotalNumOfTasks = allTasks.size() - 1;
4648
System.out.println("\t____________________________________________________________" +
4749
"\n\t Noted. I've removed this task:" +
4850
"\n\t " + this.taskType +

src/main/java/Save.java

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
import java.io.*;
2+
import java.util.ArrayList;
3+
import java.util.List;
4+
5+
public class Save {
6+
7+
public List<Task> loadTxtFile() throws IOException {
8+
List<Task> allTasks = new ArrayList<>();
9+
File file3 = new File("./data/");
10+
if (!file3.exists()) {
11+
file3.mkdir();
12+
}
13+
File file = new File("./data/duke.txt");
14+
if (file.exists()) {
15+
List<String> taskList = new ArrayList<>();
16+
FileReader file2 = new FileReader(file);
17+
BufferedReader bufferedReader = new BufferedReader(file2);
18+
String taskInformation = bufferedReader.readLine();
19+
while (taskInformation != null) {
20+
taskList.add(taskInformation);
21+
taskInformation = bufferedReader.readLine();
22+
}
23+
for (int i = 0; i < taskList.size(); i++) {
24+
String task = taskList.get(i);
25+
String[] task1 = task.split(" / ");
26+
boolean taskStatus = false;
27+
if (task1[1].equals("[ ]")) {
28+
taskStatus = false;
29+
} else if (task1[1].equals("[X]")){
30+
taskStatus = true;
31+
}
32+
if (task.startsWith("T")) {
33+
Todo todo = new Todo(i + 1, taskStatus, task1[2],
34+
taskList.size());
35+
allTasks.add(todo);
36+
} else if (task.startsWith("D")) {
37+
Deadline deadline = new Deadline(i + 1, taskStatus, task1[2],
38+
task1[3], taskList.size());
39+
allTasks.add(deadline);
40+
} else if (task.startsWith("E")) {
41+
String[] taskTiming = task1[3].split("-");
42+
Event event = new Event(i + 1, taskStatus, task1[2],
43+
taskTiming[0], taskTiming[1], taskList.size());
44+
allTasks.add(event);
45+
}
46+
}
47+
}
48+
return allTasks;
49+
}
50+
51+
public void saveListToFile(String command, Task task, List<Task> taskList) throws IOException {
52+
File file3 = new File("./data/");
53+
if (!file3.exists()) {
54+
file3.mkdir();
55+
}
56+
File file = new File("./data/duke.txt");
57+
FileWriter file1 = new FileWriter(file, true);
58+
BufferedWriter buffer = new BufferedWriter(file1);
59+
60+
if (command.startsWith("todo")) {
61+
String content = "T / " + task.getTaskStatus() + " / " + task.getTask() + "\n";
62+
buffer.write(content);
63+
} else if (command.startsWith("deadline")) {
64+
String content = "D / " + task.getTaskStatus() + " / " +
65+
task.getTask() + " / " + task.getDeadline() + "\n";
66+
buffer.write(content);
67+
} else if (command.startsWith("event")) {
68+
String content = "E / " + task.getTaskStatus() + " / " +
69+
task.getTask() + " / " + task.getEventStartTime() + "-" +
70+
task.getEventEndTime() + "\n";
71+
buffer.write(content);
72+
} else if (command.startsWith("mark")) {
73+
FileReader file2 = new FileReader(file);
74+
BufferedReader bufferedReader = new BufferedReader(file2);
75+
String[] str = command.split(" ");
76+
int taskIndex = Integer.parseInt(str[1]);
77+
String unchangedTasks = "";
78+
for (int i = 1; i < taskIndex; i++) {
79+
unchangedTasks = unchangedTasks + bufferedReader.readLine() + "\n";
80+
}
81+
if (task.getTaskType().equals("[T]")) {
82+
unchangedTasks = unchangedTasks + "T / [X] / " + task.getTask() + "\n";
83+
} else if (task.getTaskType().equals("[D]")) {
84+
unchangedTasks = unchangedTasks + "D / [X] / " +
85+
task.getTask() + " / " + task.getDeadline() + "\n";
86+
} else if (task.getTaskType().equals("[E]")) {
87+
unchangedTasks = unchangedTasks + "E / [X] / " +
88+
task.getTask() + " / " + task.getEventStartTime() + "-" +
89+
task.getEventEndTime() + "\n";
90+
}
91+
bufferedReader.readLine();
92+
for (int i = taskIndex + 1; i <= taskList.size(); i++) {
93+
unchangedTasks = unchangedTasks + bufferedReader.readLine() + "\n";
94+
}
95+
file.createNewFile();
96+
file1 = new FileWriter(file);
97+
buffer = new BufferedWriter(file1);
98+
buffer.write(unchangedTasks);
99+
} else if (command.startsWith("unmark")) {
100+
FileReader file2 = new FileReader(file);
101+
BufferedReader bufferedReader = new BufferedReader(file2);
102+
String[] str = command.split(" ");
103+
int taskIndex = Integer.parseInt(str[1]);
104+
String unchangedTasks = "";
105+
for (int i = 1; i < taskIndex; i++) {
106+
unchangedTasks = unchangedTasks + bufferedReader.readLine() + "\n";
107+
}
108+
if (task.getTaskType().equals("[T]")) {
109+
unchangedTasks = unchangedTasks + "T / [ ] / " + task.getTask() + "\n";
110+
} else if (task.getTaskType().equals("[D]")) {
111+
unchangedTasks = unchangedTasks + "D / [ ] / " +
112+
task.getTask() + " / " + task.getDeadline() + "\n";
113+
} else if (task.getTaskType().equals("[E]")) {
114+
unchangedTasks = unchangedTasks + "E / [ ] / " +
115+
task.getTask() + " / " + task.getEventStartTime() + "-" +
116+
task.getEventEndTime() + "\n";
117+
}
118+
bufferedReader.readLine();
119+
for (int i = taskIndex + 1; i <= taskList.size(); i++) {
120+
unchangedTasks = unchangedTasks + bufferedReader.readLine() + "\n";
121+
}
122+
file.createNewFile();
123+
file1 = new FileWriter(file);
124+
buffer = new BufferedWriter(file1);
125+
buffer.write(unchangedTasks);
126+
} else if (command.startsWith("delete")) {
127+
FileReader file2 = new FileReader(file);
128+
BufferedReader bufferedReader = new BufferedReader(file2);
129+
String undeletedTasks = "";
130+
String[] str = command.split(" ");
131+
int taskIndex = Integer.parseInt(str[1]);
132+
for (int i = 1; i < taskIndex; i++) {
133+
undeletedTasks = undeletedTasks + bufferedReader.readLine() + "\n";
134+
}
135+
System.out.println(undeletedTasks + "print 1");
136+
bufferedReader.readLine();
137+
for (int i = taskIndex; i <= taskList.size(); i++) {
138+
undeletedTasks = undeletedTasks + bufferedReader.readLine() + "\n";
139+
System.out.println(undeletedTasks + " print ex");
140+
}
141+
System.out.println(undeletedTasks + " print 2");
142+
file.createNewFile();
143+
file1 = new FileWriter(file);
144+
buffer = new BufferedWriter(file1);
145+
buffer.write(undeletedTasks);
146+
}
147+
buffer.close();
148+
}
149+
}

src/main/java/Task.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import java.util.List;
12
public class Task {
23
protected final int taskNumber;
34
protected final boolean taskStatus;
@@ -25,11 +26,12 @@ public void unmarkAsUndone() {
2526
"\n\t____________________________________________________________");
2627
}
2728

28-
public void printDelete() {
29+
public void printDelete(List<Task> allTasks) {
30+
int allTaskSize = allTasks.size() - 1;
2931
System.out.println("\t____________________________________________________________" +
3032
"\n\t Noted. I've removed this task:" + "\n\t " +
3133
this.getTaskStatus() + " " + this.task +
32-
"\n\t Now you have " + this.totalNumOfTasks + " tasks in the list.");
34+
"\n\t Now you have " + allTaskSize + " tasks in the list.");
3335
}
3436

3537
public int getTaskNumber() {

src/main/java/Todo.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import java.util.List;
2+
13
class Todo extends Task {
24
private final String taskType;
35

@@ -31,8 +33,8 @@ public void printToDoTask() {
3133
}
3234

3335
@Override
34-
public void printDelete() {
35-
int newTotalNumOfTasks = super.totalNumOfTasks - 1;
36+
public void printDelete(List<Task> allTasks) {
37+
int newTotalNumOfTasks = allTasks.size() - 1;
3638
System.out.println("\t____________________________________________________________" +
3739
"\n\t Noted. I've removed this task:" + "\n\t " + this.taskType +
3840
super.getTaskStatus() + " " + super.task +

0 commit comments

Comments
 (0)