繁体   English   中英

试图写入.DAT文件,但似乎没有做任何事情?

[英]Trying to write to a .DAT file but doesn't seem to be doing anything?

我在另一个应用程序中使用了此代码,以将名称和高分写入游戏文件。 现在,我正在使用此代码从.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。 从中读取的文件与所有其他类在同一个程序包中。

在阅读中,您使用以下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。

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

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

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

同样,无需在每次添加用户时一遍又一遍地复制所有用户,只需在追加模式下打开文件

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM