Erro de leitura incompreensível

Boa noite a todos

Não consigo compreender erro de leitura que estou recebendo.

O código executa até o fim do do-while, mas após mas após isso entra na Exception e dá erro de leitura de arquivo.

Alguém poderia me dar uma luz por favor.

package metodos;
	
	import java.io.BufferedReader;
	import java.io.FileReader;
	
	public class ManipuladoresArq {
	
		public static void leArq(String path) {
			try {
				FileReader arquivo = new FileReader(path);// Cria um objeto arquivo
				BufferedReader memoria = new BufferedReader(arquivo);// Cria um
																		// buffer
																		// para
																		// leitura
																		// do obj
																		// arquivo.
				String linha;// Variável para guardar as string lidas
				int numCol = 0;
				int numLinhas = 0;
	
				do {
					linha = memoria.readLine(); // leitura das linhas
	
					if (linha != null) {
						System.out.println(linha);// impirmi as linhas equanto linha
													// != null.
						numLinhas++;
					}
				} while (linha != null);
	
				for (int i = 0; i <= linha.length(); i++) {
					linha = memoria.readLine();
					if (linha.charAt(i) == '|') {
						numCol++;
					}
				}
				System.out.println("Número de linhas: " + numLinhas);
				System.out.println("Número de linhas: " + numCol);
			} catch (Exception e) {
				System.out.println("Erro na leitura do arquivo");
			}
		}
	
	}

`

É fácil descobrir: no teu bloco catch, adicione um e.printStackTrace(); e descobrirá qual a razão do problema.

Tenho esta aplicação que faz o seguinte: Inclusão de dados em um txt, alteração de dados, exclusão de dados, criação de arquivo, criação de diretório e etc…
Esta aplicação é responsável por ficar listando (manualmente) os Spam’s que encontro em minha caixa de entrada. Talvez ela pode ajuda-lo.

CadastroSpam.rar (224.5 KB)

Duvidas sobre o q mandei, entre em contato via Skype.

vamos la

este laço esta fora do do{ }while loop.

a condição para sair do while é que linha seja null. certo? ai ao fazer linha.qqmetodo BUM vc tem null pointer exception.

a sua logica de ler as linhas e colunas deveria estar dentro do mesmo while. é meio estranho o que vc esta fazendo. e ainda vc faz um laço de 0 até o tamanho da linha, mas lê uma linha la dentroo… ta muito confuso cara. organiza melhor isso ai.

No for, a chamada linha.length() é que é o problema. Você recebe uma bela NullPointerException, pois a variável linha só é iniciada dentro do bloco do do-while. Fora do escopo do do-while ela não foi inicializada.