Обновление определенной части текстового файла в Java - PullRequest
1 голос
/ 03 октября 2010

В моей программе мне нужно обновлять столбец Баланс текстового файла каждый раз, когда пользователь делает вывод.Я использовал как методы записи, так и методы добавления, но безрезультатно.После входа пользователя эта строка сохраняется в массиве

#PIN AccountNo Balance
1598 01-10-102203-0 95000
4895 01-10-102248-0 45000
9512 01-10-102215-0 125000
6125 01-10-102248 85000

Код:

try{
    BufferedWriter out = new BufferedWriter(new FileWriter(".\\AccountInfo.txt",true));
    if (amount <= 0.0) {
        System.out.println("can only withdraw positive amount!");
        transactionScreen();
    }
    else if (this.balance >= amount) {
        if(amount>15000.0){
            System.out.println("The maximum amount allowed per transaction is only Rs.15000/=");
            transactionScreen();
        }
        else{
            this.balance -= amount;
            object.c=this.balance;
            String newBal=Double.toString(this.balance);
            out.write("");
            //out.append("");
            out.write(newBal);
            //out.append(newBal);
        }
    }
    else {
        System.out.println("not enough money in account!");
        transactionScreen();
    }
}
catch(IOException e){
    e.printStackTrace();
}

Ответы [ 2 ]

6 голосов
/ 03 октября 2010

Единственный простой способ сделать это - переписывать все содержимое текстового файла каждый раз, когда вы вносите какие-либо изменения.Но это ужасно по нескольким причинам:

  • Это очень медленно.
  • Это может быть сделано только одним потоком за раз, поэтому его нелегко масштабировать.
  • Если во время записи произойдет сбой вашего приложения, вы можете потерять все свои данные.

Вы можете использовать столбцы фиксированной ширины, чтобы разрешить поиск и запись в ваш файл без необходимости перезаписывать весь файл, но естьпроблемы по-прежнему:

  • Если вам когда-либо понадобится сохранить значение, превышающее ширину, необходимую для вашего столбца, у вас возникнет проблема.
  • Вам все равно нужно прочитать весь файл (в худшем случаеcase - наполовину в среднем), чтобы найти запись, которую вы хотите изменить (здесь поможет хранение кеша в памяти).

Я бы посоветовал вам использовать базу данных.Существуют базы данных, которые можно установить локально и не требующие администрирования (например, SQLite ).

3 голосов
/ 03 октября 2010

Считайте файл листком бумаги с чем-то написанным на нем.В конце написания еще остается белая бумага, так что вы можете добавить все, что захотите.Если вы хотите что-то изменить в середине, вы можете стереть какой-то текст и написать что-то еще.Однако вы можете заменить текст только тем количеством букв, которое вы удалили.Нельзя стереть 4 буквы и написать 6 букв, там просто нет места.Следовательно, если баланс увеличивается с 900 до 1100, в файле не остается места.Существует одна дополнительная буква, которую нельзя сохранить, если не переписать оставшуюся часть файла.

Иногда, если вы хотите что-то изменить на листе бумаги, проще получить чистый лист бумагии скопируйте оригинал, включая изменения, которые вы имели в виду.Это также часто делается, когда файл изменяется.Вместо того, чтобы записывать только изменения, измененный файл подготавливается в памяти и записывается поверх исходного файла.

Piece of paper

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...