Ajuda em Java, ler e editar arquivo txt

Boa tarde. Sou novo em Java e gostaria que me ajudassem.
Estou com esse exercício e não consegui faze-lo:

Você deve desenvolver um programa que calcule o dígito verificador para uma série de matrículas da empresa SEUTIME.

Dada uma matrícula de 0000 a 9999 o cálculo do dígito verificador deverá ser feito multiplicando o primeiro número a esquerda por 5, o segundo por 4, o terceiro por 3 e o quarto por 2. O resultado parcial de cada posição deve ser somado e o resultado final da soma deverá ser dividido por 16. O resto desta divisão deverá ser convertido para hexadecimal, sendo este então o dígito verificador.

Exemplo: matrícula = 9876

Cálculo: 9 * 5 = 45 / 8 * 4 = 32 / 7 * 3 = 21 / 6 * 2 = 12 / Total = 45 + 32 + 21 + 12 = 110

Resto da divisão de 110 por 16 é igual a 14.

O número 14 em base 16 é “E”. Este é o dígito verificador da matrícula.
Matrícula completa = 9876-E

Pede-se:

1- Ler as matrículas que estão no arquivo matriculasSemDV.txt e gerar um arquivo de saída matriculasComDV.txt com as matrículas completas, conforme regra de formação descrita acima.
Exemplo:
matriculasSemDV.txt
9876
9992

matriculasComDV.txt
9876-E
9992-0

2- Ler as matrículas que estão no arquivo matriculasParaVerificar.txt e gerar um arquivo matriculasVerificadas.txt com as matrículas e um indicador de “verdadeiro” ou “falso” ao lado de cada matrícula, separado por espaço.
Exemplo:
matriculasParaVerificar.txt
9876-E
9992-2

matriculasVerificadas.txt
9876-E verdadeiro
9992-2 falso


já fiz isso :
//ler o arquivo
try(Scanner scanner = new Scanner (new FileInputStream (“C:\Users\Leonardo\Desktop\SoftblueJAVA\matriculasSemDV.txt”))){

			while (scanner.hasNext()) {
			String s = scanner.nextLine();
			//s += line + "\n";
				
				System.out.println(s);

//conta sem ler do arquivo
float[] array = new float[7];

//digita 4 numeros para fazer a conta.
	try (Scanner entrada = new Scanner(System.in)) {
		
		
	
	System.out.println("Valores: ");
	array[0] = entrada.nextFloat();
	array[1] = entrada.nextFloat();
	array[2] = entrada.nextFloat();
	array[3] = entrada.nextFloat();
	
	
	
	//conta [0] * 5 = 45 / [1] * 4 = 32 / [2] * 3 = 21 / [3] * 2 = 12 / Total = 45 + 32 + 21 + 12 = 110
	
	 float conta1 = (array[0] * 5) + (array[1] * 4) + (array[2] * 3) + (array[3] * 2);
	
	System.out.println(conta1);
	
	
	// divisão por 16
	
	float conta2 = conta1 % 16;
	
	System.out.println(conta2);
			
	//convertento para hexadecimal
	
	
	String total = Integer.toHexString((int) conta2);
	
	
	
	System.out.println(total);

E o que você já fez?

bom dia.
eu consigo ler o arquivo usando a classe Scanner.
A conta eu fiz com array, o meu problema é transformar (seperar) os dados do arquivo em array para aplicar a conta. E depois criar o segundo arquivo com a inclusão de uma nova coluna.
vou tentar refazer os codigos aqui, pq ja refiz com varias pesquisas da net e esta uma bagunça rs.

Ler arquivo –

try(Scanner scanner = new Scanner (new FileInputStream (“C:\Users\Leonardo\Desktop\SoftblueJAVA\matriculasSemDV.txt”))){

			while (scanner.hasNext()) {
			String s = scanner.nextLine();
			//s += line + "\n";
				
				System.out.println(s);

conta - sem ler o arquivo –

float[] array = new float[7];
	
	
//digita 4 numeros para fazer a conta.
	try (Scanner entrada = new Scanner(System.in)) {
		
		
	
	System.out.println("Valores: ");
	array[0] = entrada.nextFloat();
	array[1] = entrada.nextFloat();
	array[2] = entrada.nextFloat();
	array[3] = entrada.nextFloat();
	
	
	
	//conta [0] * 5 = 45 / [1] * 4 = 32 / [2] * 3 = 21 / [3] * 2 = 12 / Total = 45 + 32 + 21 + 12 = 110
	
	 float conta1 = (array[0] * 5) + (array[1] * 4) + (array[2] * 3) + (array[3] * 2);
	
	System.out.println(conta1);
	
	
	// divisão por 16
	
	float conta2 = conta1 % 16;
	
	System.out.println(conta2);
			
	//convertento para hexadecimal
	
	
	String total = Integer.toHexString((int) conta2);
	
	
	
	System.out.println(total);

Você lê cada linha como uma String. Cada matrícula deve ser uma linha diferente, não?
Como é uma String, você consegue quebrar em chars e, cada char pode ser convertido para int

char[] numbers = s.toCharArray();
int p1 = Character.getNumericValue(number[0]);
int v1 = p1 * 5;

Entendeu?

Entendi !!!

segue:
char[] number = s.toCharArray();
int p1 = Character.getNumericValue(number[0]);
int p2 = Character.getNumericValue(number[1]);
int p3 = Character.getNumericValue(number[2]);
int p4 = Character.getNumericValue(number[3]);

			int conta1 = (number[0] * 5) + (number[1] * 4) + (number[2] * 3) + (number[3] * 2);
			
			int conta2 = conta1 % 16;
			
			String total = Integer.toHexString((int) conta2);
							
			System.out.println(total);

agora entendi, qnd eu transformo em array eu crio automaticamente para todas as linhas, não estava entendendo isso, vou tentar criar um arquivo com esses dados agora…
vlw !!!

Bem isso, fera.
Escrever é fácil.
Depois, validar é só efetuar o mesmo processo.

Obrigado mesmo. Mais uma duvida.
eu não consigo escrever todos os dados que estão na variavel direto pro arquivo. eu tenho uma variavel com 5 linas.
ex:
String comDV = s + “-” + total;

			System.out.println(comDV);
			
			
			
			try(PrintStream ps = new PrintStream(new FileOutputStream ("C:\\Users\\Leonardo\\Desktop\\SoftblueJAVA\\matriculasComDV.txt"))){
				ps.print(comDV); 

o PrintStream ou FileWriter só incluem a ultima linha da variavel.

Teoricamente, eles deveriam escrever tudo o que for passado para eles.

Bom dia ! Você tem este programa completo no github ou em zip ?

Leo vc tem esse arquivo .zip ou pelo git:

Boa tarde. Sou novo em Java e gostaria que me ajudassem.
Estou com esse exercício e não consegui faze-lo:

Você deve desenvolver um programa que calcule o dígito verificador para uma série de matrículas da empresa SEUTIME.

Dada uma matrícula de 0000 a 9999 o cálculo do dígito verificador deverá ser feito multiplicando o primeiro número a esquerda por 5, o segundo por 4, o terceiro por 3 e o quarto por 2. O resultado parcial de cada posição deve ser somado e o resultado final da soma deverá ser dividido por 16. O resto desta divisão deverá ser convertido para hexadecimal, sendo este então o dígito verificador.

Exemplo: matrícula = 9876

Cálculo: 9 * 5 = 45 / 8 * 4 = 32 / 7 * 3 = 21 / 6 * 2 = 12 / Total = 45 + 32 + 21 + 12 = 110

Resto da divisão de 110 por 16 é igual a 14.

O número 14 em base 16 é “E”. Este é o dígito verificador da matrícula.
Matrícula completa = 9876-E

Pede-se:

1- Ler as matrículas que estão no arquivo matriculasSemDV.txt e gerar um arquivo de saída matriculasComDV.txt com as matrículas completas, conforme regra de formação descrita acima.
Exemplo:
matriculasSemDV.txt
9876
9992

matriculasComDV.txt
9876-E
9992-0

2- Ler as matrículas que estão no arquivo matriculasParaVerificar.txt e gerar um arquivo matriculasVerificadas.txt com as matrículas e um indicador de “verdadeiro” ou “falso” ao lado de cada matrícula, separado por espaço.
Exemplo:
matriculasParaVerificar.txt
9876-E
9992-2

matriculasVerificadas.txt
9876-E verdadeiro
9992-2 falso

te passaram esse programa em zip?