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