-
Notifications
You must be signed in to change notification settings - Fork 1
/
TextBuddy.java
213 lines (190 loc) · 6.56 KB
/
TextBuddy.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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
import java.io.File;
import java.io.FileWriter;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.ArrayList;
/**
* Code written by: Muhammad Adam
* Student ID: A0121813U
* This class is used to create a text file where user can add, delete, clear and display text.
* User can store as many lines of text as he or she wants.
* Limited to commands: "add", "clear", "delete", "display" and "exit". NO OTHER COMMANDS OR SHORTCUT AVAILABLE
* If user were to add an exact copy of text, the class WOULD NOT ignore the command and just execute it.
* The command format is given by the example interaction below:
Welcome to TextBuddy. mytextfile.txt is ready for use
command: add rehearse for oral presentation
added to mytextfile.txt: "rehearse for oral presentation"
command: display
1. rehearse for oral presentation
command: add remember to buy groceries for mother
added to mytextfile.txt: "remember to buy groceries for mother"
command: display
1. rehearse for oral presentation
2. remember to buy groceries for mother
command: delete 1
deleted from mytextfile.txt: "rehearse for oral presentation"
command: display
1. remember to buy groceries for mother
command: clear
all content deleted from mytextfile.txt
command: display
mytextfile.txt is empty
command: exit
*/
public class TextBuddy {
private static final String MESSAGE_WELCOME = "Welcome to TextBuddy. %s is ready for use%n";
private static final String MESSAGE_COMMAND = "command: ";
private static final String MESSAGE_ADDED = "added to %s: \"%s\"%n";
private static final String MESSAGE_EMPTY = "%s is empty%n";
private static final String MESSAGE_PRINT_LINE = "%d. %s%n";
private static final String MESSAGE_NOT_FOUND = "File not found in the working directory";
private static final String MESSAGE_CLEARED = "all content deleted from %s%n";
private static final String MESSAGE_DELETED = "deleted from %s: \"%s\"%n";
private static final String MESSAGE_NO_EXIST = "Line number %d does not exist%n";
private static final String MESSAGE_UNKNOWN_COMMAND = "Unknown command given";
private static final String MESSAGE_NO_ADD = "Nothing to add";
private static final String MESSAGE_NO_NUMBER = "Please provide a number";
private static boolean isRunning = true;
private static Scanner userInput = new Scanner(System.in);
private static PrintWriter writer = null;
public static void main(String[] args) {
printWelcomeMessage(args[0]);
createNewWriter(args[0]);
while (isRunning) {
String command = promptForCommand();
executeCommand(args[0], command);
}
}
private static void printWelcomeMessage(String fileName) {
System.out.printf(MESSAGE_WELCOME, fileName);
}
// Program create a new text file with the name based on user input
private static void createNewWriter(String fileName) {
try {
writer = new PrintWriter(new FileWriter(fileName, true));
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static String promptForCommand() {
System.out.print(MESSAGE_COMMAND);
return userInput.nextLine();
}
// Program will append the specific line of text to the file given
private static void addLineToFile(String fileName, String lineOfText ) {
try {
writer = new PrintWriter(new FileWriter(fileName, true));
writer.println(lineOfText);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.printf(MESSAGE_ADDED, fileName, lineOfText);
}
// Program will print line by line to the console, appending bulletpoints before each line
private static void printLinesOnScreen(String fileName) {
try {
File content = new File(fileName);
Scanner textFile = new Scanner(content);
if (!textFile.hasNextLine()) {
System.out.printf(MESSAGE_EMPTY, fileName);
} else {
int bulletpoint = 1;
while (textFile.hasNextLine()) {
System.out.printf(MESSAGE_PRINT_LINE, bulletpoint, textFile.nextLine());
bulletpoint++;
}
}
textFile.close();
} catch (FileNotFoundException e) {
System.out.println(MESSAGE_NOT_FOUND);
}
}
// Program will delete all the contents of the file
private static void clearFile(String fileName) {
try {
writer = new PrintWriter(fileName);
writer.close();
System.out.printf(MESSAGE_CLEARED, fileName);
} catch (FileNotFoundException e) {
System.out.println(MESSAGE_NOT_FOUND);
}
}
// Program will store all the lines in an array
private static ArrayList<String> storeInArrayList(String fileName) {
ArrayList<String> listOfText = new ArrayList<String>();
try {
File content = new File(fileName);
Scanner textFile = new Scanner(content);
while (textFile.hasNextLine()) {
listOfText.add(textFile.nextLine());
}
textFile.close();
} catch (FileNotFoundException e) {
System.out.println(MESSAGE_NOT_FOUND);
}
return listOfText;
}
// Program will delete the nth line of the file
private static void deleteLineInFile(String fileName, String number) {
try {
ArrayList<String> allLines = storeInArrayList(fileName);
int counter = 1;
int index = Integer.parseInt(number);
boolean isDeleted = false;
writer = new PrintWriter(new FileWriter(fileName, false));
for (String line: allLines) {
if (counter != index) {
writer.println(line);
} else {
isDeleted = true;
System.out.printf(MESSAGE_DELETED, fileName, line);
}
counter++;
}
if (!isDeleted) {
System.out.printf(MESSAGE_NO_EXIST, index);
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void exitProgram() {
isRunning = false;
}
private static void showUnknownCommandMsg() {
System.out.println(MESSAGE_UNKNOWN_COMMAND);
}
// Program will check what command was issued before calling out other functions
private static void executeCommand(String file, String string) {
String[] stringArr = string.split(" ", 2);
String keyword = stringArr[0];
if (keyword.equals("add")) {
try {
String actionWord = stringArr[1];
addLineToFile(file, actionWord);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(MESSAGE_NO_ADD);
}
} else if (keyword.equals("exit")) {
exitProgram();
} else if (keyword.equals("display")) {
printLinesOnScreen(file);
} else if (keyword.equals("clear")) {
clearFile(file);
} else if (keyword.equals("delete")) {
try {
String actionWord = stringArr[1];
deleteLineInFile(file, actionWord);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(MESSAGE_NO_NUMBER);
}
} else {
showUnknownCommandMsg();
}
}
}