-
Notifications
You must be signed in to change notification settings - Fork 0
/
Storage.java
152 lines (135 loc) · 4.03 KB
/
Storage.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package CE2;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
/** This class will do all the creating, editing, searching and format the content of the text file
* Note that only valid commands will use this class
*/
public class Storage {
private String fileName;
public Storage(String fileName) {
this.fileName = fileName;
}
public PrintWriter openTextFileOveride(boolean overide) {
PrintWriter writer = null;
try {
writer = new PrintWriter(new FileWriter(fileName, !overide));
} catch (IOException e) {
e.printStackTrace();
}
return writer;
}
public void closeTextFile(PrintWriter writer) {
writer.close();
}
// Add a line to the text file
public void addLine(String description) {
PrintWriter writer = openTextFileOveride(false);
writer.println(description);
closeTextFile(writer);
}
// Delete a line from the text file
public String deleteLine(String lineNumber) {
ArrayList<String> allLines = storeInArrayList();
PrintWriter writer = openTextFileOveride(true);
String lineDeleted = deleteLineHelper(lineNumber, allLines, writer);
closeTextFile(writer);
return lineDeleted;
}
// Format the contents of the text file so that it prints line by line
public String printLines() {
ArrayList<String> allLines = storeInArrayList();
return printLinesHelper(allLines, "", 1);
}
// Clear all the contents of the text file
public void clearLines() {
PrintWriter writer = createFreshTextFile();
closeTextFile(writer);
}
// Sort alphabetically the contents of the text file
public void sortContent() {
ArrayList<String> allLines = storeInArrayList();
Collections.sort(allLines);
clearLines();
for (String line: allLines) {
addLine(line);
}
}
// Store all lines that contain the keyword into ArrayList before passing to other method
public String searchFor(String keyword) {
ArrayList<String> allLines = storeInArrayList();
ArrayList<String> resultLines = new ArrayList<String>();
for (int index = 0; index < allLines.size(); index++) {
String[] cutUpLine = allLines.get(index).split(" ");
if (searchForHelper(cutUpLine, keyword)) {
resultLines.add(allLines.get(index));
}
}
return printLinesHelper(resultLines, "", 1);
}
// Helper function for the searchFor method
private boolean searchForHelper(String[] line, String keyword) {
for (String word: line) {
if (word.equals(keyword)) {
return true;
}
}
return false;
}
// Helper function for the deleteLine method
private String deleteLineHelper(String lineNumber, ArrayList<String> allLines, PrintWriter writer) {
int counter = 1;
int index = Integer.parseInt(lineNumber);
String lineDeleted = "";
for (String line: allLines) {
if (counter != index) {
writer.println(line);
} else {
lineDeleted = line;
}
counter++;
}
return lineDeleted;
}
// Helper function for the printLines method
private String printLinesHelper(ArrayList<String> allLines, String displayString, int bulletpoint) {
for (int index = 0; index < allLines.size(); index++) {
displayString += bulletpoint + ". " + allLines.get(index);
if (index != allLines.size()-1) {
displayString += "\n";
bulletpoint++;
}
}
return displayString;
}
// Store the contents of the text file to an ArrayList
private ArrayList<String> storeInArrayList() {
ArrayList<String> listOfText = new ArrayList<String>();
File content = new File(fileName);
try {
Scanner textFile = new Scanner(content);
while (textFile.hasNextLine()) {
listOfText.add(textFile.nextLine());
}
textFile.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return listOfText;
}
// Helper function for clearLines method
private PrintWriter createFreshTextFile() {
PrintWriter writer = null;
try {
writer = new PrintWriter(fileName);
} catch (IOException e) {
e.printStackTrace();
}
return writer;
}
}