Olá pessoal, tudo bem?
Bom eu tenho um trabalho onde tenho q fazer um crud em um arquivo de dados organizados em bits.
para eu criar um novo registro eu tenho q ler o ultimo id guardado no inicio do arquivo de dados, atualizar o (novoRegistro.id = idLido + 1) e depois atualizar o inico do arquivo de dados com o id do ultimo registro criado, pórem não tenho nem ideia de como vou fazer para sobrecrever/trocar o id do cabeçalho pelo novo id. O código até agora está assim:
    public static void create(RandomAccessFile raf, String nome, String cpf, String cidade, List<String> emails, String usuario, String senha, float saldo){
        Contas temp = new Contas(0,nome, emails, usuario, senha, cpf, cidade, saldo);
        try {
            raf.seek(0);
            temp.idConta = (raf.readInt() + 1);
            
        } catch (IOException e) {
            e.printStackTrace();
        }
       
    }
         
        
          
        
           
           
           
         
         
            
            
          
       
      
        
        
          Tem vários jeitos de fazer, mas eu acho que faria algo assim:
Criaria uma classe para representar o meu banco de dados, que será um arquivo de texto.
E a cada inserção eu leria o banco inteiro, atualizaria o último id, adicionaria a nova conta e reescreveria tudo sobrescrevendo os dados anteriores.
Eu fiz um código de exemplo:
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class App {
  private static final Path path = Path.of("db.txt");
  record Account(int id, String nome, String email) {
  }
  private static class Db {
    private int lastId;
    private List<Account> accounts;
    Db(int lastId, List<Account> accounts) {
      this.lastId = lastId;
      this.accounts = accounts;
    }
    void addAccount(final Account account) {
      this.accounts.add(account);
    }
    int getLastId() {
      return this.lastId;
    }
    int getNextId() {
      return ++this.lastId;
    }
    List<Account> getAccounts() {
      return this.accounts;
    }
  }
  private static Db readDb() {
    try {
      if (!Files.exists(path)) {
        Files.writeString(path, "0\n");
      }
      try (var scanner = new Scanner(Files.newInputStream(path)).useDelimiter(",|\n")) {
        final var lastId = scanner.nextInt();
        final var accounts = new ArrayList<Account>();
        while (scanner.hasNext()) {
          accounts.add(new Account(scanner.nextInt(), scanner.next().strip(), scanner.next().strip()));
        }
        return new Db(lastId, accounts);
      }
    } catch (final IOException e) {
      throw new UncheckedIOException(e);
    }
  }
  private static void addAccount(String name, String email) {
    try {
      final var db = readDb();
      final var account = new Account(db.getNextId(), name, email);
      db.addAccount(account);
      final var lines = new ArrayList<String>();
      lines.add(Integer.toString(db.getLastId()));
      for (final var a : db.getAccounts()) {
        lines.add("%d, %s, %s".formatted(a.id(), a.nome(), a.email()));
      }
      Files.write(path, lines);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  public static void main(String... args) {
    for (int i = 0; i < 10; i++) {
      addAccount("Nome " + i, "email" + i);
    }
  }
}
         
        
        
           
           
           1 curtida