Проблема в том, что notepad.exe
требователен к окончанию строки, и есть много возможностей.Когда вы пишете "\n"
в FileWriter
, он записывает один символ, а именно '\n'
.Но в блокноте ожидается последовательность "\r\n"
.Он показывает один "\n"
как ничто .
Вот ваш код, слегка модифицированный для обхода некоторых ловушек.
package so7696816;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Locale;
import java.util.Scanner;
public class Excercise {
public static void main(String args[]) throws Exception {
final Scanner input = new Scanner(System.in);
PrintWriter fWriter = new PrintWriter("data.txt");
while (true) {
System.out.print("Enter command: ");
String enter[] = input.nextLine().split(" ", 3);
final String command = enter[0].toLowerCase(Locale.ROOT);
if (command.equals("insert")) {
fWriter.println(enter[1]);
fWriter.println(enter[2]);
fWriter.flush();
} else if (command.equals("select")) {
FileReader fReader = new FileReader("data.txt");
Scanner fileInput = new Scanner(fReader);
while (fileInput.hasNextLine()) {
String key = fileInput.nextLine();
String value = fileInput.nextLine();
if (key.equals(enter[1])) {
System.out.println(value);
break;
}
}
fReader.close(); // don't leave files open
} else if (command.equals("update")) {
fWriter.write(enter[2]);
fWriter.flush();
} else if (command.equals("exit")) {
return;
} else {
System.err.println("Unknown command: " + command);
}
}
}
}
Замечания:
- Я использовал
PrintWriter
вместо FileWriter
, чтобы получить правильные окончания строк. - Для команды
select
я закрыл fReader
после его использования. - Я избегал многократного ввода
enter[0].toLowerCase()
. - Я использовал правильный вариант
toLowerCase
. - Я добавил обработку ошибок для неизвестных команд.
- Я переписалкоманда
select
должна быть немного более краткой.