0

我在另一个应用程序中使用此代码将名称和高分写入我的游戏文件。现在我正在使用此代码从 .DAT 文件中获取名称和密码,并能够添加新用户和密码。这是 .DAT 文件。

michael123
speaker123
katherine123
motor123
username
password

这是代码。读取文件工作正常,但写入它根本没有任何作用,我不确定为什么。

InputStream file;
BufferedReader fileStream;
FileWriter fileWriter;
BufferedWriter fileWrite;
String temp = "";
int users = 0;

public void readUserInfo() throws IOException {
    try {
        file = Board.class.getResourceAsStream("users.DAT");
        fileStream = new BufferedReader(new InputStreamReader(file));
    } catch (Exception e) {
        System.out.println("File not found");
    }
    for (int i = 0; i < users; i++) {

            temp = fileStream.readLine();
            Board.username[i] = temp.trim();
            temp = fileStream.readLine();
            Board.password[i] = temp.trim();

    }
    //Close
    fileStream.close();
    file.close();
}

public void addUser() throws IOException {

    fileWriter = new FileWriter(Board.class.getResource("users.DAT").getFile(),true);
    fileWrite = new BufferedWriter(fileWriter);
    System.out.println("Users : " + users);
    //Skip already created users
   for (int i = 0; i < users; i++) {

        fileWrite.newLine();
        fileWrite.append(Board.username[i]);
        fileWrite.newLine();
        fileWrite.append(Board.password[i]);

    } 
    System.out.println("Adding" + Board.username[users] + " : " + Board.password[users]);
    //Add user  
    fileWrite.newLine();
    fileWrite.append(Board.username[users]);
    fileWrite.newLine();
    fileWrite.append(Board.password[users]);
    //Close
    fileWrite.close();
    System.out.println("Closed fileWrite");
}

我正在使用netbeans。正在读取的文件与所有其他类在同一个包中。

4

2 回答 2

0

在你的阅读中,你file = Board.class.getResourceAsStream("users.DAT");在写作中使用你只需创建一个新文件File("users.DAT"),如何改变你addUser()

public void addUser() throws IOException {
       fileWriter = new FileWriter(Board.class.getResource("users.DAT").getFile());
       ....
}

编辑:问题是在编写过程中您没有检索到与以前相同的文件。我会添加这个方法

public File getUserDataFile() {
    return new File(Board.class.getResource("").getFile(), "users.DATA");
}
// then use it like this
new FileWriter(getUserDataFile());
// and
new BufferedReader(new InputStreamReader(getUserDataFile()));

然后在您想要读取和写入文件时访问它。如果您的文件不存在,问题Board.class.getResourceAsStream("users.DAT")将返回 null。

于 2013-09-15T19:19:55.767 回答
0

也许您已经用文件的某种状态users.DAT(一组已定义的用户)打包了您的 jar,当您从类路径中读取它们时,您只会看到创建 jar 时的用户。然后写入到另一个文件。

您也应该从文件系统中读取用户。

检查您的应用程序的工作目录,应该有包含添加的用户的正确文件。

也无需每次添加用户时一遍又一遍地复制所有用户,只需以附加模式打开文件

fileWriter = new FileWriter(new File("users.DAT"), true);

除非您希望能够删除用户,否则在这种情况下将所有内容保留在内存中,并在您退出程序或明确使用保存操作时保存。

于 2013-09-15T19:21:00.890 回答