代码之家  ›  专栏  ›  技术社区  ›  Louise Kaithlyn

在文件输入输出java中使用arraylist

  •  1
  • Louise Kaithlyn  · 技术社区  · 6 年前

    所以,问题来了。我想使用java GUI创建一个文件,这类似于用户可以在我的GUI中创建一个帐户或登录,然后他们的帐户变成文件。我的txt。但是,我这里有个问题。当我在GUI中创建一个帐户时,它运行良好,并且创建了文件。但是,当我再次尝试创建帐户时,以前创建的帐户已经不存在了。所以,我想在这种情况下我需要使用arraylist,我使用了它,但它仍然不起作用。代码如下:

    String filename="D:/settings.txt";
    
    public void getIdentity() throws FileNotFoundException, IOException{
        File file = new File(filename);
        ArrayList identity = new ArrayList();
    
        String fullname = txt_fullname.getText();
        String username = txt_username.getText();
        String password = pass_password.getText();
    
        try {
            FileWriter fw = new FileWriter(filename);
            Writer output = new BufferedWriter(fw);
    
            identity.add(fullname + "-" + username + "-" + password);
    
            for (int i = 0; i <identity.size(); i++)
            {
             output.write(identity.get(i).toString() + "\n");
            }
            output.close();
        }
    
    
        catch (Exception ex)
        {
            JOptionPane.showMessageDialog(null, "Cannot create a file");
        }
    
    }
    

    这就是行动:

    try {
    
            if(txt_username.getText() != null && pass_password.getText() != null
               && txt_fullname.getText() != null)
            {
            getIdentity(); 
            JOptionPane.showMessageDialog(null, "Congratulations, you've created a file");
            this.setVisible(false);
            Login login = new Login();
            login.setVisible(true);
            }
            else {
                JOptionPane.showMessageDialog(null, "Please fill in your identity");
            }
        } catch (IOException ex) {
    
        }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Mạnh Quyết Nguyễn    6 年前

    你有 FileWriter fw = new FileWriter(filename);

    因此,每次调用函数时,文件都会被反复重写。

    因此,您有两种选择:

    1. 为每个设置文件名存储一个凭据。(例如,您可以通过在设置文件中附加用户名来区分文件)
    2. 将所有凭据存储到 settings 文件但你必须在中打开文件 append 模式

          FileWriter fw = new FileWriter(filename, true); // true flag indicate appending mode
      

      而且您还必须更改您的读取端,因为您的设置文件现在存储所有凭据。