#java #database
#java #База данных
Вопрос:
Я пытаюсь использовать текстовый файл в качестве базы данных и столкнулся с проблемой. Проблема в том, что когда я записываю информацию о пользователе в текстовый файл, она не записывается в следующую строку, когда я добавляю второго пользователя. Он просто перезаписывает старый. Как я могу добавить что-то вроде writeToNextLine?
public void addAdmin(String adminName, String adminSurName, String adminUserName, String adminPassword) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter("C:\Users\cemon\IdeaProjects\Library\src\database\AdminUserData.txt"));
writer.write(adminName " " adminSurName);
writer.newLine();
writer.write(adminUserName " " adminPassword);
writer.newLine();
writer.close();
}
Комментарии:
1. Подсказка: посмотрите на
FileWriter
перегрузки конструктора.2. Сэр, я нашел это, но я не понял, что вы хотели сказать. Не могли бы вы, пожалуйста, объяснить мне это? А также нет ли способа, чтобы он не создавал новый файл каждый раз. Я не хочу, чтобы мои данные терялись каждый раз, когда я закрываю программу
3. FileWriter(строковый файл) создает новый файл. Он получает имя файла в строке. FileWriter(файловый файл) Создает новый файл. Он получает имя файла в объекте File.
4. FileWriter(файловый файл, логическое добавление) Сэр, это тот, который мне нужен?
Ответ №1:
Плохая идея. Откуда вы знаете, что не добавляете дублирующего пользователя?
Если вам нужен простой текстовый файл в качестве базы данных, загрузите текстовый файл в память при запуске, например, как Map<String, User>
введенный пользователем adminUserName
, и добавьте туда нового пользователя. Всякий раз, когда изменяется значение, записывайте всех пользователей обратно в текстовый файл.
Это также гарантирует, что (будущие) операции, такие как «удалить пользователя», будут работать правильно.
Рекомендуем реализовать UserStore
класс с предлагаемым Map
в качестве поля, чтобы сохранить реализацию скрытой (инкапсулированной) от остальной части вашей программы.
Комментарии:
1. У меня есть проверки, сэр
2. общедоступный логический isUserNameTaken() { File файл = новый файл(«C:\Users\cemon\IdeaProjects\Library\src\database\CivilianUserData.txt «); попробуйте{ Scanner reader = новый сканер(файл); while(reader.hasNextLine()){ if(reader.nextLine().substring(0,userName.getText().length() 1).equals(userName.getText())){ возвращает true; } } }catch (исключение e){ }
3. Я никогда раньше не использовал Map, я даже не знаю, что это такое или как это работает, спасибо за ваше предложение. Мне нужно провести некоторое исследование того, что вы сказали. Я довольно новичок
4. Именно так я иногда использую для тестовых пользователей, когда большая база данных sql является излишеством!
Ответ №2:
Вы хотите включить append
режим в FileWriter
. Это означает, что когда вы пишете новую строку, вместо перезаписи добавляется еще одна строка.
Ваш код должен быть:
public void addAdmin(String adminName, String adminSurName, String adminUserName, String adminPassword) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter("C:\Users\cemon\IdeaProjects\Library\src\database\AdminUserData.txt", true));
writer.write(adminName " " adminSurName);
writer.newLine();
writer.write(adminUserName " " adminPassword);
writer.newLine();
writer.close();
}