boa noite
estou tentando importar um arquivo csv, mas no meio da importação ele aparece o erro…
java.lang.ArrayIndexOutOfBoundsException: 3
at com.principal.Monitoramento.csv(Monitoramento.java:167)
at com.principal.Monitoramento$1.run(Monitoramento.java:78)
o valor existe, não esta zerado.
o arquivo csv tem 3559 linhas, ele importa até a linha 1764 e para com o erro.
seque código
o erro é na linha " pln0048r.setPick(valores[3]);"
public void csv(){
Path a = Paths.get("K:\\arquivo\\0048.csv");
boolean exists = Files.exists(a);
boolean notExists = Files.notExists(a);
if (exists) {
System.out.println("File exists!");
System.out.println("executando");
Pln0048r pln0048r = new Pln0048r();
Pln0048rJpaDAO.getInstance().removeAll();
System.out.println("excluir pln0048r");
File arquivoCSV = new File ("K:\\arquivo\\0048.csv");
try{
String linha = new String();
Scanner scan = new Scanner(arquivoCSV);
scan.nextLine();
System.out.println(arquivoCSV);
System.out.println("inserindo");
while(scan.hasNext()) {
linha = scan.nextLine();
String[] valores = linha.split(";");
if(valores[0].length() > 0) {
pln0048r.setCd(valores[0]);
pln0048r.setConferente(valores[1]);
pln0048r.setNome(valores[2]);
pln0048r.setPick(valores[3]);
pln0048r.setVolume(valores[4]);
pln0048r.setCliente(valores[5]);
pln0048r.setRazao(valores[6]);
pln0048r.setRota(valores[7]);
pln0048r.setRoteiro(valores[8]);
pln0048r.setData(valores[9]);
pln0048r.setEstacao(valores[10]);
pln0048r.setProduto(valores[11]);
pln0048r.setDescricao(valores[12]);
pln0048r.setLote(valores[13]);
pln0048r.setValidade(valores[14]);
pln0048r.setQtd(valores[15]);
Pln0048rJpaDAO.getInstance().merge(pln0048r);
System.out.println(valores[3] + valores[4]);
// linha = scan.nextLine();
}
}
scan.close();
arquivoCSV.delete();
System.out.println("fim da importação");
}catch(Exception e) {
e.printStackTrace();
}
} else if (notExists) {
System.out.println("File doesn't exist!");
}
}
staroski
deu um depurar, ele mostrou que não a linha 389 não tem a posição 3, mas a posição existe e tem informção.
nessa posição digitei na mão o valor e rodei novamente, mas na linha 391 acusou que a a posição 15 não existe, mas também existe e tem informação nela…
como faço para quando aparecer esse tipo de erro ela pular a linha e continuar importando?
ele esta retornando que não existe a posição…
só uma duvida, se o meu arquivo esta completo, como o java retornando posição inexistente.
é o codigo que digitei errado?
linha = “SPI;14600710;LUCIANA MUZEL ; 439.425; 5;W15542;DROGAL FARMACEUTICA LTDA ;766;051;12/07/2018; 8; 706092;EUCERIN GEL OIL CONTR FPS60 52; ; ; 12”
posição 0 = SPI
posição 1 = 14600710
posição 2 = LUCIANA MUZEL
posição 3 = 439.425
posição 4 = 5
posição 5 = W15542
posição 6 = DROGAL FARMACEUTICA LTDA
posição 7 = 766
posição 8 = 051
posição 9 = 12/07/2018
posição 10 = 8
posição 11 = 706092
posição 12 = EUCERIN GEL OIL CONTR FPS60 52
posição 13 =
posição 14 =
posição 15 = 12
linha = "SPI;00404587;GRACE VALERETTO CAPELOSSA "
posição 0 = SPI
posição 1 = 00404587
posição 2 = GRACE VALERETTO CAPELOSSA
fim da importação
Se você observar a linha "SPI;00404587;GRACE VALERETTO CAPELOSSA " realmente só possui 3 campos separados por ; então não tem como acessar mais.
Imagens do arquivo não ajudam, pois não dá pra copiar o conteúdo.
De qualquer forma, na imagem postada nem aparece a linha que você tem problema: "SPI;00404587;GRACE VALERETTO CAPELOSSA "
Utilize este método e veja o que será impresso na saída:
public void csv() {
File arquivoCSV = new File("K:\\arquivo\\0048.csv");
System.out.println("Importando arquivo: \"" + arquivoCSV.getAbsolutePath() + "\"");
if (arquivoCSV.exists()) {
Pln0048rJpaDAO pln0048rJpaDAO = Pln0048rJpaDAO.getInstance();
pln0048rJpaDAO.removeAll();
try {
BufferedReader reader = new BufferedReader(new FileReader(arquivoCSV));
reader.readLine(); // ignorar 1ª linha
String linha = null;
while ((linha = reader.readLine()) != null) {
String[] campos = linha.split(";");
System.out.println("Campos da linha \"" + linha + "\" {");
for (int i = 0; i < campos.length; i++) {
System.out.println(" " + i + ": \"" + campos[i] + "\"");
}
System.out.println("}");
Pln0048r pln0048r = new Pln0048r();
pln0048r.setCd(campos[0]);
pln0048r.setConferente(campos[1]);
pln0048r.setNome(campos[2]);
pln0048r.setPick(campos[3]);
pln0048r.setVolume(campos[4]);
pln0048r.setCliente(campos[5]);
pln0048r.setRazao(campos[6]);
pln0048r.setRota(campos[7]);
pln0048r.setRoteiro(campos[8]);
pln0048r.setData(campos[9]);
pln0048r.setEstacao(campos[10]);
pln0048r.setProduto(campos[11]);
pln0048r.setDescricao(campos[12]);
pln0048r.setLote(campos[13]);
pln0048r.setValidade(campos[14]);
pln0048r.setQtd(campos[15]);
pln0048rJpaDAO.merge(pln0048r);
}
reader.close();
arquivoCSV.delete();
System.out.println("Fim da importação");
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("Arquivo não existe");
}
}
Não esta aparecendo a linha que você tem problema: "SPI;00404587;GRACE VALERETTO CAPELOSSA "
pois é outro arquivo e agora ela para na "SPI;00400096; “AGATA NAYARA MARONI”.