Quero fazer um id sequêncial que compara com o que já foi salvo no banco de dados para não repetir.
Estou usando ficheiro txt como banco de dados.
Para contornar esse problema usei o método Random.
Mas que quero algo sequêncial, já pesquisei bastante e nada do que eu encontrei me deu uma ideia exata do que eu queria, alguém poderia me ajudar?
Edit: Está é o projecto que estou trabalhando, o id(prontuário) é quero que seja sequencial(por exemplo, 1, 2, 3, 4) caso eu apagar um id ele não repetir.
Para utilizar sequencial utilizando um txt como base de dados, você precisa sempre recuperar o último id savo e incrementá-lo.
Para usar um identificador sem se preocupar com isso poderia usar um UUID.
Estou considerando que vc está salvando seus dados assim, com o id sendo o primeiro dado:
1,aaa
2,bbb
3,ccc
Para pegar o último id, vc poderia fazer assim:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Comparator;
import java.util.stream.Stream;
public class Main {
public static void main(String... args) {
saveName("aaa");
saveName("bbb");
saveName("ccc");
}
private static void saveName(String name) {
try {
long lastId = getLastId() + 1;
String data = lastId + "," + name + "\n";
Files.write(Paths.get("database.txt"), data.getBytes(), StandardOpenOption.APPEND);
} catch (IOException e) {
System.out.printf("Erro: %s não foi salvo!%n", name);
}
}
private static long getLastId() {
try (Stream<String> lines = Files.lines(Paths.get("database.txt"))) {
return lines
.map(line -> Long.valueOf(line.split(",")[0].trim()))
.max(Comparator.naturalOrder())
.orElse(0L);
} catch (IOException e) {
return 0;
}
}
}

[Não consegui implementar o código acima num projeto como este]
O que estou fazendo para tentar dar solução ao problema.
Tem como mostrar isso?
Postei o que estou tentando fazer.
Se é pra ser sequencial, por que não usa o próprio banco de dados pra isso?
Todo banco possui suporte a SEQUENCE
, basta pesquisar como fazer para o que vc está usando.
Uma SEQUENCE
já garante unicidade (não vai repetir, mesmo se dois ou mais usuários tentarem inserir ao mesmo tempo - esse tipo de controle é bem mais complicado de fazer na camada da aplicação, deixe que o banco cuide disso). E como o nome já diz, também garante que será sequencial.
Não reivente a roda 
Poderias fazer um exemplo de como seria,
Material para banco de dados txt é difícil de achar,
Não sabia sobre isso por isso tô tentando reinventar
Ah, agora que eu vi que vc está usando um TXT…
Então use o que já foi sugerido 
Tentei fazer a implementação, mas não deu certo.
Por isso partilhei a foto com detalhes do que quero fazer…
Com UUID seria algo assim:
String id = UUID.randomUUID().toString();
Se for utilizar sequencial pode seguir o exemplo que o @wldomiciano já postou mais acima.
Vc pode mostrar o código da parte que salva os dados no TXT e um exemplo do TXT gerado? Na hora de postar código, evita usar prints, melhor usar o bloco de códigos que o proprio forum disponibiliza.
private void cadastrarActionPerformed(java.awt.event.ActionEvent evt) {
Data d = new Data();
data.setText(d.getDataString());
if (nome.getText().equals("")) {
JOptionPane.showMessageDialog(this, "Preencher o campo nome.");
} else if (endereco.getText().equals("")) {
JOptionPane.showMessageDialog(this, "Preencher o campo endereço.");
} else if (contacto.getText().equals("")) {
JOptionPane.showMessageDialog(this, "Preencher o campo contacto.");
} else {
try {
BufferedWriter conexao;
Paciente p = new Paciente(iden.getText(), nome.getText(), idade.getText(), endereco.getText(), contacto.getText(), peso.getText(), temperatura.getText(), risco.getSelectedItem().toString(), seccao.getSelectedItem().toString(), data.getText());
conexao = new BufferedWriter(new FileWriter("paciente_consulta.txt", true));
PacienteConexao control = new PacienteConexao();
control.banco(conexao, p);
conexao.close();
JOptionPane.showMessageDialog(this, "Cadastrado com sucesso.");
loadTable();
clean();
gerarId();
} catch (IOException e) {
JOptionPane.showMessageDialog(this, e.getMessage());
}
}
}
public class PacienteConexao {
public void banco(BufferedWriter bw, Paciente p) {
try {
bw.write(p.getId() + “;”);
bw.write(p.getNome() + “;”);
bw.write(p.getIdade() + “;”);
bw.write(p.getEndereco() + “;”);
bw.write(p.getContacto() + “;”);
bw.write(p.getPeso() + “;”);
bw.write(p.getTemperatura() + “;”);
bw.write(p.getRisco() + “;”);
bw.write(p.getSeccao() + “;”);
bw.write(p.getData() + “;\n”);
} catch (IOException e) {
e.getMessage();
}
}
}
9424;Moniz António;19;Luanda;923 458 764;55,9;28,7;Azul;Pediatria;04/04/2022;
Experimentar fazer uma modificação no método gerarId()
. Altera para ficar assim:
Veja que mudei um pouquinho o código que mostrei na minha primeira resposta. Eu adaptei para a sua necessidade.
private void GerarActionPerformed() {
gerarId();
}
public void gerarId() {
iden.setText(String.valueOf(getLastId()));
}
private long getLastId() {
try (Stream<String> lines = Files.lines(Paths.get("paciente_consulta.txt"))) {
return lines
.map(line -> Long.valueOf(line.split(";")[0].trim()))
.max(Comparator.naturalOrder())
.orElse(0L);
} catch (IOException e) {
return 0;
}
}
E como faço para incrementar?
No método gerarId tentei usar:
long lastId = getLastId() + 1;
Mas não muda o valor
private void GerarActionPerformed() {
gerarId();
}
public void gerarId() {
iden.setText(String.valueOf(getLastId()));
long lastId = getLastId() + 1;
// Usei o comando de saída para ver o que acontece
//e nada desejado, imprimi 1 mas não seta no iden
}
private long getLastId() {
try (Stream lines = Files.lines(Paths.get(“paciente_consulta.txt”))) {
return lines
.map(line → Long.valueOf(line.split(";")[0].trim()))
.max(Comparator.naturalOrder())
.orElse(0L);
} catch (IOException e) {
return 0;
}
}
A ideia é que ele incremente sozinho.
Tenta debugar para ver se ele está conseguindo ler o arquivo corretamente, pode ser que ele não esteja encontrando seu TXT.