Я пытаюсь сделать систему входа в систему с помощью модели и DAO класса писать пользователей в файл с именем users.txt
DAO класса не писать в файл
В мой контроллер, я создал initialize
метод:
public void initialize(){
User user = new User();
user.addUser();
}
Вот часть моей модели, которая содержит addUser()
метод:
public void addUser() {
User newUser = new User();
UserDAO uDAO = new UserDAO();
uDAO.createUser(newUser);
}
И это мой класс DAO (я не могу просто вставить createUser()
метод, как она связана с несколькими другими методами в классе):
package Server;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Scanner;
public class UserDAO implements UserDAOInterface {
private static final String User_File = "users.txt";
private File dataFile;
public UserDAO() {
Path dPath = FileSystems.getDefault().getPath("src/MainMenu",User_File);
dataFile = new File(dPath.toString());
}
public ArrayList<User> getAllUsers() {
Scanner sc;
String record = null;
String[] fields;
ArrayList<User> users = new ArrayList<User>();
try {
sc = new Scanner(dataFile);
while (sc.hasNextLine()) {
record = sc.nextLine();
fields = record.split(";");
String username = fields[0];
String password = fields[1];
User u = new User();
users.add(u);
}
} catch (FileNotFoundException e) {
System.out.println("No record found!");
//e.printStackTrace();
}
return users;
}
public User getUser(String username) {
ArrayList<User> users = getAllUsers();
User user = null;
for (User u: users) {
if (u.getUsername().equals(username)) {
user = u;
break;
}
}
return user;
}
public boolean createUser(User user) {
boolean existing = false;
ArrayList<User> users = getAllUsers();
for (User u: users) {
if (u.getUsername().equals(user.getUsername())) {
existing = true;
break;
}
}
if (!existing) {
users.add(user);
synToFile(users);
}
return !existing;
}
public void updateUser(User user) {
ArrayList<User> users = getAllUsers();
for (int i = 0; i < users.size(); i++) {
User u = users.get(i);
if (u.getUsername().equals(user.getUsername())){
users.set(i, user);
}
}
synToFile(users);
}
public void deleteUser(User user) {
ArrayList<User> users = getAllUsers();
User delUser = null;
for (User u: users) {
if (user.getUsername().equals(u.getUsername())){
delUser = u;
break;
}
}
if (delUser != null) {
users.remove(delUser);
synToFile(users);
}
}
public void synToFile(ArrayList<User> userList) {
if (userList == null) {
return;
}
try {
FileWriter out = new FileWriter(dataFile);
for (User u: userList) {
out.append(u.toString() + "\n");
}
}catch (IOException e) {
e.printStackTrace();
}
}
}
Я импортировал все, что нужно импортировать, и все пути правильны. Я попытался удалить текстовый файл и запустить приложение, чтобы узнать, работает ли этот путь, и ему удаётся создать текстовый файл, но он не обновляет файл, ничего не записывая.
Я подозреваю, что проблема может быть связана с не созданием пароля для пользователя, и поскольку в поле пароля нет пароля, он ничего не может написать; но я не могу разобраться в этом.
Кроме того, в модели нет ничего более важного; просто некоторые атрибуты, аксессоры и мутаторы, а также конструктор по умолчанию, который не содержит ничего.
Обновление: Добавлен класс пользователя здесь для справки.
package Server;
public class User {
private String username;
private String password;
public User() {
}
public void addUser() {
User newUser = new User();
UserDAO uDAO = new UserDAO();
uDAO.createUser(newUser);
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Я хотел сделать последний, но после попытки 'uDAO.createUser (это)' та же проблема по-прежнему сохраняется - в текстовом файле ничего не меняется. – cosmo
Вы получаете какие-либо ошибки? – Jobin
Вставьте оператор отладочной печати непосредственно перед out.append(). Список может быть пустым, прежде чем вы узнаете. – Mordechai