用Java编写文件的最佳方式是什么?

用Java编写文件的最佳方式是什么?,java,file-io,Java,File Io,最近,我的一个朋友让我为他设计一个程序,让他更容易管理他的小生意。基本上,用户应该选择一个客户的名称,代码检索有关该客户的信息,比如该客户欠下的金额,或者下次我的朋友应该会见该客户时。现在,我的程序通过使用这段代码从名为AccountData.txt的文件中读取数据,做得很好 myScanner = new Scanner(System.in); diskScanner = new Scanner(AccountData); System.out

最近,我的一个朋友让我为他设计一个程序,让他更容易管理他的小生意。基本上,用户应该选择一个客户的名称,代码检索有关该客户的信息,比如该客户欠下的金额,或者下次我的朋友应该会见该客户时。现在,我的程序通过使用这段代码从名为AccountData.txt的文件中读取数据,做得很好

        myScanner = new Scanner(System.in);
        diskScanner = new Scanner(AccountData);

        System.out.println("Type an existing account name to get started or type 'new' to create another");

        name = myScanner.next();

        do {
            reading = diskScanner.next();
        } while(!reading.equals(name));


        weekday = diskScanner.next();
        day = diskScanner.nextInt();
        month = diskScanner.nextInt();
        Amount = diskScanner.nextDouble();
        TotalAmount = diskScanner.nextDouble();

        System.out.print("Next Job is ");
        System.out.print(weekday);
        System.out.print(" ");
        System.out.print(month);
        System.out.print("/");
        System.out.println(day);
        System.out.print("The total amount payed by this client is ");
        System.out.println(TotalAmount);
        System.out.print("The total amount owed is ");
        System.out.println(Amount);

         AddDates.AddingDates();
…但我在编写现有代码时遇到问题

public class AddDates {
     private static Scanner myScanner;
     static String reply;
          public static void AddingDates() throws IOException {
              myScanner = new Scanner(System.in);
              System.out.println("Add Dates?");
              reply = myScanner.next();
              AccountReader.adder = new PrintWriter(new FileWriter(AccountReader.AccountData, true));

               if (reply .equals("Y")) {
                    System.out.println("Day, Date, Month, Cost of Lawn");
                    AccountReader.weekday = myScanner.next();
                    AccountReader.day = myScanner.next();
                    AccountReader.month = myScanner.next();
                    AccountReader.Amount = myScanner.next();

                    AccountReader.adder.print(" ");
                    AccountReader.adder.print(AccountReader.weekday);
                    AccountReader.adder.print(" ");
                    AccountReader.adder.print(AccountReader.day);
                    AccountReader.adder.print(" ");
                    AccountReader.adder.print(AccountReader.month);
                    AccountReader.adder.print(" ");
                    AccountReader.adder.print(AccountReader.Amount);
                    AccountReader.adder.print(" ");
                    AccountReader.adder.print(AccountReader.TotalAmount);
                    AccountReader.adder.flush();
                } else {
                     System.out.println("OK");
                }
      }
}

因为读取文件是位置敏感的,所以写入文件的这段代码不起作用。这主要是因为它将信息添加到文件的末尾。(我还应该补充一点,AccountData.txt文件看起来像这样)

所以我的主要问题是。。。是否有写入文件并将信息写入文件中的特定位置(如其他字符串旁边)的方法,或者是否有其他方法可以编写代码以使其满足我的目的

client like the amount this client owes,
如果你在编程方面没有经验,我强烈建议你在对你所做的事情有了更坚定的理解之前,不要这样做,因为与钱打交道会变得非常危险,代码中的一个小错误可能会造成很大的损害

现在我还不知道你想做什么。您正在尝试从更改文件中的文本吗

Masterson Saturday 22 9 50 300


在这种情况下,您必须同时打开文件上的输入流和输出流,只需编写输出流,直到到达要修改的行,打印该行,然后继续将输入流放入输出流。如果我确实知道您要找的是什么,我可以为它编写一些示例代码

请在进行货币/货币计算时使用double。有关原因,请参阅


快速总结-“浮动和双倍不能准确表示我们用于货币的基本10倍。”。。。“将货币表示为双精度或浮点数一开始可能看起来不错,因为软件会对微小的错误进行四舍五入处理,但当你对不精确的数字执行更多的加法、减法、乘法和除法时,随着错误的增加,你将失去越来越高的精度。这使得浮点数和双精度不足以处理货币,因为对于10次基本幂的倍数,需要有足够的精度。”

我建议您学习随机访问文件。您需要在读取文件时写入一个文件?这听起来像是一场即将发生的灾难。你应该将文件读入一些数据结构,进行转换,然后写回文件。你的朋友应该学习一些经营企业的基础知识。他想要的一半可以通过Outlook任务完成,而会计部分应该通过会计软件完成。时期对不起,你不能靠一个基本上不知道怎么做的人拼凑的玩具软件来经营生意。
Masterson Saturday 22 9 50 300
Masterson Saturday 22 9 50 300 --> Processed Successfully!