У меня есть большая проблема с этим. Моя база данных (clients.txt) выглядит следующим образом:Java - сохранение данных в hashmap
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
Я просто DataBase класс с частными полями, добытчиками, инкубационных и класс DataBaseHandler, который читает клиентов. TXT и делает мой HashMap:
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 и я работает (чтение) по нац при данных в классе 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
Что самое supprising является то, что когда я скопировал четыре последние строки и нажал ctrl + v, он будет вставлять только
cardNumberq
линия. Это проблема с кодировкой? Как решить мою проблему?
Благодарим за ответ. Это мой первый «большой» проект в java, так что приятно учиться у таких людей, как вы :) – tmq