Java txt-файл как база данных

#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();
}