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
@staroski deu certo! Só pra eu entender, essa linha:
int numero = Integer.parseInt(String.valueOf(linha.charAt(0)));
converte de String pra Inteiro certo?