Java 当我想添加更多数据时,如何不覆盖文本文件中已有的数据

Java 当我想添加更多数据时,如何不覆盖文本文件中已有的数据,java,formatter,Java,Formatter,这是我打开txt文件时使用的代码,但每次我想输入更多数据时,它都会覆盖数据 private Formatter X; private File Y = new File("C:\\Users\\user\\workspace\\Property Charge Management System\\users.txt"); private Scanner Z; public String[][] PCMSarray; public boolean OpenFil

这是我打开txt文件时使用的代码,但每次我想输入更多数据时,它都会覆盖数据

private  Formatter X;
    private File Y = new File("C:\\Users\\user\\workspace\\Property Charge Management System\\users.txt");
    private Scanner Z;
    public  String[][] PCMSarray;
    public boolean OpenFile() {
        try{
            if(Y.exists()==false){
                X = new Formatter("users.txt");
            }
            return true;
        }
        catch(Exception e){
            System.out.println("File has not yet been created.");
            return false;
        }
    }
这是我用来写入文件的代码,但它可以工作

public void WriteToFilecmd(){
        Scanner input = new Scanner(System.in);
        System.out.println("Please enter your First name");
        String Fname = input.next();
        System.out.println("Please enter your Last name");
        String Lname = input.next();
        System.out.println("Please enter your Password");
        String Password = input.next();
        System.out.println("Please enter your user ID");
        String ID = input.next();
        System.out.println("Please enter the first address line of your Property");
        String addressln1 = input.next();
        System.out.println("Please enter the second address line of your Property");
        String addressln2 = input.next();
        System.out.println("Please enter the third address line of your Property");
        String addressln3 = input.next();
        System.out.println("Please enter the properties estimated market value");
        String EstimatedPropertyValue = input.next();
        System.out.println("Please enter your tax owed");
        String Taxowed = input.next();
        input.close();

        X.format("%1$20s %2$20s %3$20s %4$20s %5$20s %6$20s %7$20s %8$20s %9$20s \n",Fname,Lname,Password,ID,addressln1,addressln2,addressln3,EstimatedPropertyValue,Taxowed);
    }

为格式化程序使用不同的构造函数,该构造函数接受可追加的FileWriter,并构造FileWriter,使其追加到文件末尾:

// the second boolean parameter, true, marks the file for appending
FileWriter fileWriter = new FileWriter(fileName, true); 
Formatter formatter = new Formatter(fileWriter);

另外,请学习并遵循Java命名规则,否则您的代码将不容易被其他人(即我们)理解!。变量和方法名称应以小写字母开头。

对格式化程序使用不同的构造函数,该构造函数采用可追加的FileWriter,并构造FileWriter,使其追加到文件末尾:

// the second boolean parameter, true, marks the file for appending
FileWriter fileWriter = new FileWriter(fileName, true); 
Formatter formatter = new Formatter(fileWriter);

另外,请学习并遵循Java命名规则,否则您的代码将不容易被其他人(即我们)理解!。变量和方法名称应以小写字母开头。

您的代码在许多方面有点混乱,但我认为问题在于您正在测试:

  C:\\Users\\user\\workspace\\Property Charge Management System\\users.txt
但是你现在开始了

  users.txt
。。。这恰好是一个不同的文件,因为您当前的目录不是您认为应该的目录

即使这不是导致问题的原因,你也应该解决它。执行代码时,如果当前目录不是C:\Users\user\workspace\Property Charge Management System,则当前编写代码的方式将中断

如果您真的想附加到文件而不是覆盖它,那么您需要使用一个格式化程序构造函数,它接受一个打开的输出流或写入程序。。。并向其提供已在追加模式下打开的流


我也不应该说您在代码中犯了严重的样式错误。Java代码的通用规则是变量名和方法名必须以小写字母开头。人们认为任何以大写字母开头的东西都是类。。。除非名称都是大写,这是为清单常量保留的。

您的代码在许多方面有点混乱,但我认为问题在于您正在测试:

  C:\\Users\\user\\workspace\\Property Charge Management System\\users.txt
但是你现在开始了

  users.txt
。。。这恰好是一个不同的文件,因为您当前的目录不是您认为应该的目录

即使这不是导致问题的原因,你也应该解决它。执行代码时,如果当前目录不是C:\Users\user\workspace\Property Charge Management System,则当前编写代码的方式将中断

如果您真的想附加到文件而不是覆盖它,那么您需要使用一个格式化程序构造函数,它接受一个打开的输出流或写入程序。。。并向其提供已在追加模式下打开的流


我也不应该说您在代码中犯了严重的样式错误。Java代码的通用规则是变量名和方法名必须以小写字母开头。人们认为任何以大写字母开头的东西都是类。。。除非名称都是大写字母,这是为清单常量保留的。

可能希望用它所用的语言对其进行标记,但有一些杂项提示:用小写字母id而不是id开始变量名,因为遵循Java命名约定有助于提高可读性。使用相关变量名调用Scanner Scanner,而不是Z。尝试发布一个完整的可编译示例,并对其进行精简,以便我们可以将重点放在与您的问题无关的WriteToFilecmd方法的详细信息上。在finally块中调用input.close,以确保即使引发异常也始终执行它。写y、 exists,而不是y.exists==false。与字符串[][]相比,更喜欢列表。可能需要使用它所用的语言来标记它。一些杂项提示:使用小写字母id而不是id来开始变量名,因为遵循Java命名约定有助于提高可读性。使用相关变量名调用Scanner Scanner,而不是Z。尝试发布一个完整的可编译示例,并对其进行精简,以便我们可以将重点放在与您的问题无关的WriteToFilecmd方法的详细信息上。在finally块中调用input.close,以确保即使引发异常也始终执行它。写y、 exists,而不是y.exists==false。首选列表而不是字符串[]。