[RESOLVIDO]Verificação de letras em arquivo .txt

Olá, estou com uma dificuldade de ler um arquivo .txt com o seguinte conteúdo:

1;VFVF
2;VVVF
3;FFVF

Tenho que fazer uma verificação se o valor na posição 0 da linha 1 é ‘1’, e o valor na posição 0 da linha 2 é “2” e assim sucessivamente… Tentei assim mas não consegui

public class Cliente1 {

    public static void main(String[] args) throws UnknownHostException, IOException {

        Socket cliente = new Socket("127.0.0.1", 12345);
        String caminho = "D:\\arquivoLadoCliente.txt";
        System.out.println("* O cliente se conectou ao servidor!");

        System.out.println("* Mensagem do cliente salva em: " + caminho);

        PrintStream saida = new PrintStream(cliente.getOutputStream());
        BufferedReader br = new BufferedReader(new FileReader(caminho));

        String linha ="";
        String n1 = "";

        while (br.ready()) {
            linha = br.readLine();
            n1 = linha;                
            System.out.println("* Conteúdo do cliente: " + linha);
            saida.println(n1);

            //Aqui eu faço a verificação começando um contador i=1
            String frase = linha;
            int i = 1;
            //testa se o valor de i=1 é igual a 1 na posição 0
            if ((frase.charAt(0) == i)) {
                System.out.println("deu certo");
            } else {
                System.out.println("deu erro");
            }
            i++;
      }
        br.close();
        saida.close();

    }
}

Porém está retornando o else (“deu erro”)

Alguem poderia me ajudar?

Percebi que o charAt pega o caractere, no caso mudei o contador i=1 para “49” que equivale o “1” na tabela ASCII, a primeira verificação deu certo, porém as outras caíram no else

vc define i dentro do loop

a cada linha ele vai re-inicializar o valor de i para 1 e fazer i++ no final.

defina i fora do loop

Seria mais eficaz utilizar um for aninhado assim você garante que irá passar de linha em linha e caractere em caractere.

Acho que vc tem um problema conceitual

da documentação oficial: https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#ready()

True if the next read() is guaranteed not to block for input, false otherwise. Note that returning false does not guarantee that the next read will block.

ou seja, vc não deveria verificar se o buffered reader esta ready, vc deveria verificar se o metodo readLine retornou false ou não.

https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()

A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached

ou seja

String linha;
while ((linha = br.readLine()) != null) {
...
}
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Cliente1 {

    public static void main(String[] args) throws UnknownHostException, IOException {
        Socket cliente = new Socket("127.0.0.1", 12345);
        String caminho = "D:\\arquivoLadoCliente.txt";
        System.out.println("* O cliente se conectou ao servidor!");
        System.out.println("* Mensagem do cliente salva em: " + caminho);

        PrintStream saida = new PrintStream(cliente.getOutputStream());
        BufferedReader br = new BufferedReader(new FileReader(caminho));

        int linhaAtual = 1;
        String linha = null;
        while ((linha = br.readLine()) != null) {
            System.out.println("* Conteúdo do cliente: " + linha);
            int numero = Integer.parseInt(String.valueOf(linha.charAt(0)));
            if (numero == linhaAtual) {
                System.out.println("deu certo");
            } else {
                System.out.println("deu erro");
            }
            linhaAtual++;
        }
        br.close();
        saida.close();
    }
}
1 curtida

o for em vez do while?

@staroski deu certo! Só pra eu entender, essa linha:

int numero = Integer.parseInt(String.valueOf(linha.charAt(0)));

converte de String pra Inteiro certo?

https://docs.oracle.com/javase/10/docs/api/java/lang/Integer.html#parseInt(java.lang.String)