[RESOLVIDO ]Quantidade de colunas arquivo CSV

5 respostas
java
C

Boa tarde pessoal,

Estou com um exercício onde tenho um arquivo em csv.

O método para leitura do arquivo eu tenho esse:

public static List<String[]> lerArquivos(String arquivoInsumos) {

// estrutura para armazenar o conteudo do aquivo e devolver para quem acionou
	List<String[]> listaRetorno = new ArrayList<String[]>();

	BufferedReader conteudoCSV = null;
	String linha = "";
	String csvSeparadorCampo = ";";
	// boolean primeiraLinha = true;

	
	try {

		conteudoCSV = new BufferedReader(new FileReader(arquivoInsumos));

		while ((linha = conteudoCSV.readLine()) != null) {

			String[] dados = linha.split(csvSeparadorCampo);

			System.out.println(" " + dados[0] + "  " + dados[1] + "  " + dados[2] + "  " + dados[3] + "  "
					+ dados[4] + "  " + dados[5] + "  " + dados[6] + "  " + dados[7] + "  " + dados[8] + "  "
					+ dados[9] + "  " + dados[10] + "  " + dados[11] + "  " + dados[12] + "  " + dados[13] + "  "
					+ dados[14] + "  " + dados[15]);

			
			// adiciona linha na estrutura
			listaRetorno.add(dados);

		}

	} catch (FileNotFoundException e) {

		System.out.println("Arquivo não encontrado: \n" + e.getMessage());

	} catch (ArrayIndexOutOfBoundsException e) {

		System.out.println("IndexOutOfBounds: \n" + e.getMessage());

	} catch (IOException e) {

		System.out.println("IO Erro: \n" + e.getMessage());

	} finally {

		if (conteudoCSV != null) {

			try {

				conteudoCSV.close();

			} catch (IOException e) {

				System.out.println("IO Erro: \n" + e.getMessage());

			}

		}

	}

	return listaRetorno;

E agora eu preciso validar se a quantidade de colunas está correta, pois é necessário que tenha o mesmo número de campos lidos (16).

Cheguei a ler sobre a utilização do tokenizer, mas não deu o efeito esperado.

public static List getTokensFromFile(String arquivoInsumos){

List<String> tokens = new ArrayList<String>();
	String linha = "";
	StringTokenizer tokenizer;
	String csvSeparadorCampo = ";";
	BufferedReader conteudoCSV = null;
	int tokenLenght = tokens.size();
	
	try {
		
		conteudoCSV = new BufferedReader(new FileReader(arquivoInsumos)); 
			
		while ((linha = conteudoCSV.readLine()) != null) {
			
				tokenizer = new StringTokenizer(csvSeparadorCampo);
				
				while(tokenizer.hasMoreElements()) {
					
					tokens.add(tokenizer.nextToken());
					
				}
			}
			
		} catch (IOException e) {
			
			e.printStackTrace();
			
		}		 
	
	//return tokens;
	
	System.out.println(tokens.size());
	return tokens;
	
}

Gostaria de uma ajuda para que eu pudesse validar se o total de colunas == 16 é o correto e caso contrário, tenha uma coluna a mais ou coluna a menos, retorne erro de quantidade de colunas inválidas.

Grato pela ajuda!!!

5 Respostas

D

Ué, e qual o problema em validar o tamanho do vetor dados?

C

Bom dia Darlan!!

O problema é que não estou conseguindo retornar, no caso, se com 16 colunas está correto e se com 15 colunas ou com 17 colunas, o arquivo é inconsistente.

Preciso validar isto… ainda não manjo muito de Java.

D

Você tem esse trecho:

Se você adicionar isso:

if(16 != dados.length) {
    throw new Exception("Arquivo inconsistente");
}
S

Você não precisa do StringTokenizer, após ter feito o split da sua linha, você tem um array cujo tamanho é o número de colunas.

Então basta fazer o que o @darlan_machado sugeriu, verifica o tamanho do array, se for diferente de 16 então o arquivo está inconsistente.

C

valeu minha gente!!!

Criado 10 de julho de 2019
Ultima resposta 11 de jul. de 2019
Respostas 5
Participantes 3