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

时间:2012-11-22 03:13:34

标签: 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 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);
    }

2 个答案:

答案 0 :(得分:4)

对Formatter使用不同的构造函数,一个采用FileWriter(可附加)的构造函数,并构造FileWriter以便它附加到文件的末尾:

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

顺便说一句,请学习并遵循Java命名规则,否则其他人不会轻易理解您的代码(即我们!)。变量和方法名称应以小写字母开头。

答案 1 :(得分:0)

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

  C:\\Users\\user\\workspace\\Property Charge Management System\\users.txt

但是你正在打开

  users.txt

...恰好是一个不同的文件,因为你的“当前目录”不是你认为的那样。

即使这不是造成问题的原因,也应该修复它。代码当前编写的方式将在代码执行时当前目录不是“C:\ Users \ user \ workspace \ Property Charge Management System”时中断。


如果你真的想追加而不是覆盖它,那么你需要使用一个Formatter构造函数来获取打开的输出流或编写器...并提供它使用已在附加模式下打开的流。


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