Используйте arraylist в файле ввода вывода Java - PullRequest
0 голосов
/ 05 мая 2018

Итак, вот вопрос. Я хочу создать файл, используя java GUI, это что-то вроде того, что пользователь может создать учетную запись или войти в мой GUI, а затем его учетная запись становится file.txt в моем. Но у меня есть проблема здесь. Когда я создаю учетную запись в моем графическом интерфейсе, она работает хорошо, и файл создается. Но когда я снова попытался создать учетную запись, созданная ранее учетная запись исчезла. Итак, я думаю, мне нужно использовать 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 Ответ

0 голосов
/ 05 мая 2018

У вас есть FileWriter fw = new FileWriter(filename);

Таким образом, ваш файл перезаписывается снова и снова при каждом вызове вашей функции.

Итак, у вас есть два варианта:

  1. Сохраните одно удостоверение для каждого имени файла настроек. (вы можете отличить файл, добавив имя пользователя в файл настроек, например)
  2. Сохранить все учетные данные в settings файле. Но вы должны открыть свой файл в append режиме

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

    И вам также нужно изменить сторону чтения, поскольку в вашем файле настроек теперь хранятся все учетные данные.

...