1

这是我在打开 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);
    }
4

2 回答 2

4

为 Formatter 使用不同的构造函数,一个接受 FileWriter(它是 Appendable)的构造函数,并构造 FileWriter 以便它附加到文件的末尾:

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

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

于 2012-11-22T03:25:34.173 回答
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,它是为清单常量保留的。

于 2012-11-22T03:25:59.913 回答