【问题标题】:Creating a new, but different object, each time a program runs每次程序运行时创建一个新的但不同的对象
【发布时间】:2014-02-04 16:24:20
【问题描述】:

所以我试图将用户列表存储到外部文本文件中,如果他们还没有帐户,那么他们需要注册,他们的帐户会被添加到文本文件中。

但是每次我创建一个新用户时,它都会覆盖文本文件中的最后一个用户。

任何人都可以看到我创建新用户的代码有什么问题吗?如果有明显的东西可以解决它?

编辑:

我相信每次运行程序时都会重新创建文本文件,我怎样才能添加到它,而不是每次都创建一个新文件?

System.out.println("Enter your full name below (e.g. John M. Smith): ");
        String name = scanner.nextLine();
        System.out.println("Create a username: ");
        String userName = scanner.nextLine();
        System.out.println("Enter your starting deposit amount: ");
        double balance = scanner.nextInt();

        System.out.print(dash);
        System.out.print("Generating your information...\n");
        System.out.print(dash);

        int pin = bank.PIN();
        String accountNum = bank.accountNum();

        User user = new User(name, userName, pin, accountNum, balance);

        // new user gets added to the array list
        Bank.users.add(user);

        System.out.println(user);

    }

    try {

        File file = new File("users.text");

        if (!file.exists()) {
            file.createNewFile();
        }

        FileWriter fw = new FileWriter(file.getAbsoluteFile());
        BufferedWriter  bw = new BufferedWriter(fw);

        bw.append(String.valueOf(Bank.users));
        bw.close(); 

        System.out.print("DONE");

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

【问题讨论】:

    标签: java oop object arraylist


    【解决方案1】:

    您的问题是,当您创建 FileWriter 实例时,您并没有要求它追加。默认为覆盖。

    试试这个(上下文的额外行):

        if (!file.exists()) {
            file.createNewFile();
        }
    
        // Line being changed
        FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
    
    
        BufferedWriter  bw = new BufferedWriter(fw);
    
        bw.append(String.valueOf(Bank.users));
        bw.close(); 
    

    【讨论】:

    • 谢谢!你对我帮助很大!
    【解决方案2】:

    这样的事情应该可以工作:

    String filename= "users.test";
    FileWriter fw = new FileWriter(filename,true); //the true will append the new data
    fw.write(String.valueOf(Bank.users));//appends the string to the file
    fw.close();
    

    试试这个。一定要添加例外和其他东西。

    【讨论】:

      【解决方案3】:

      这是因为文件在打开时会截断。您必须以 append 模式打开它,使用:

      FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
      

      第二个参数将告诉FileWriter 这样做。参考here

      【讨论】:

        【解决方案4】:

        替换这个:

        FileWriter fw = new FileWriter(file.getAbsoluteFile()); //overwrite
        

        通过这个:

        FileWriter fw = new FileWriter(file.getAbsoluteFile(), true); //append
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-21
          • 1970-01-01
          • 1970-01-01
          • 2021-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多