-1

これを理解するには大きな問題があります。私のデータベース (clients.txt) は次のようになります。

Tom;Test1;1000000.00;58010168302;63481000-10000090;1111;2000000.00;1000000.00
John;Test2;1000000.00;58010158125;63481000-10000091;2222;2000000.00;1000000.00

左から:

 name;surname;balance;pesel;cardNumber;pin;dailyLimit;maxDebit

プライベート フィールド、ゲッター、セッター、および client.txt を読み取って HashMap を作成する DataBaseHandler クラスを持つ単純な DataBase クラスがあります。

public static Map<Integer, DataBase> data = new HashMap<Integer, DataBase>();
private static Scanner scanner;

public static void read() {

    try {
        scanner = new Scanner(new FileReader("db/clients.txt"));
        int i = 0;
        while(scanner.hasNextLine()) {
            String[] columnData = scanner.nextLine().split(";");
            data.put(i, new DataBase(columnData[0], 
                                     columnData[1],
                                     columnData[2],
                                     columnData[3], 
                                     columnData[4], 
                                     columnData[5], 
                                     columnData[6], 
                                     columnData[7]));
            i++;
        }

これはクライアント サーバー アプリケーション (ATM のシミュレーター) であるため、ATMServer クラスで read() 関数を呼び出し、そのデータを ATMProtocol クラス (DataBaseHandler を拡張する) で操作 (読み取り) しています。私の問題はどこですか?決済機能を作るにあたって。残高の値を変更するか、新しい残高でまったく新しい行を作成し、古いものを削除してclients.txtファイルに保存したいだけです。シリアライゼーションについて読んだので、その機能を作成しました:

private String payment(String frameNum,
                       String cardNum,
                       String pinNum,
                       String amount) {
    /* something less important
    String answer = null;
    double localAmount = Double.parseDouble(amount);
    double newAmount = 0;

    for(int i = 0; i < data.size(); i++) {
        if(cardNum.equals(data.get(i).getCardNumber())
                && pinNum.equals(data.get(i).getPin())
                && checkAmount(localAmount, i)) {

            newAmount = Double.parseDouble(data.get(i).getBalance()) - localAmount;
            String newAmountString = String.valueOf(newAmount); */
            DataBase dbBase = new DataBase(data.get(i).getName(),
                                            data.get(i).getSurname(),
                                            newAmountString,
                                            data.get(i).getPesel(),
                                            data.get(i).getCardNumber(),
                                            data.get(i).getPin(),
                                            data.get(i).getDailyLimit(),
                                            data.get(i).getMaxDebit());

            try {
                FileOutputStream fileOut = new FileOutputStream("db/clients.txt",true);

                ObjectOutputStream out = new ObjectOutputStream(fileOut);

                out.writeObject(dbBase);
                out.close();
                fileOut.close();

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

このアプリを実行すると、clients.txt は次のようになります。

Tom;Test1;1000000.00;58010168302;63481000-10000090;1111;2000000.00;1000000.00
John;Test2;1000000.00;58010158125;63481000-10000091;2222;2000000.00;1000000.00
cardNumberq
dailyLimitq
2000000.00t
1000000.00t

最も驚くべきことは、最後の 4 行をコピーして ctrl+v を押すと、貼り付けられるだけだったことです。

cardNumberq

ライン。エンコーディングに問題がありますか?私の問題を解決するにはどうすればよいですか?

4

1 に答える 1