gpt4 book ai didi

java - DAO 类不写入文件

转载 作者:行者123 更新时间:2023-11-30 06:50:08 28 4
gpt4 key购买 nike

我正在尝试通过使用模型和 DAO 类将用户写入名为 users.txt 的文件来创建登录系统

在我的 Controller 中,我创建了一个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();
}
}
}

我已经导入了我需要导入的所有内容,所有路径都是正确的。我已尝试删除文本文件并运行应用程序以查看路径是否有效,它确实设法创建了文本文件,但它不会通过向文件写入任何内容来更新文件。

我怀疑这个问题可能与没有为用户创建任何密码有关,而且由于没有密码字段,它不能写任何东西;但我想不出解决这个问题的办法。


此外,模型中的其他内容都不重要;只是一些属性、访问器和修改器,以及一个不包含任何内容的默认构造函数。


更新:在此处添加了 User 类以供引用。

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;
}
}

最佳答案

将用户同步到文件时,您需要关闭您的流:

try {
FileWriter out = new FileWriter(dataFile);
for (User u: userList) {
out.append(u.toString() + "\n");
}
out.close(); // <- new!

} catch (IOException e) {
e.printStackTrace();
}

还要确保您的文件存在,否则您将在 getAllUsers() 方法中抛出 FileNotFoundException。

关于java - DAO 类不写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41710940/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com