Olá pessoal, estou tentando desenvolver uma aplicação para ler um CSV, separar alguns campos, montar um objeto, para que futuramente possa manipular esse objeto como bem entender ...
Porém esse CSV é mtoooooo grande, cerca de 40 milhões de registros !
Montei uma aplicaçãozinha em cima de uma amostra de teste, deu certo, porém quando vou colocar pra rodar na amostra verdadeira recebo esse seguinte erro ?OutOfMemoryError: Java heap space? =/
Vou postar a aplicação aqui, se alguém puder me ajudar a dar uma otimizada no código ficarei mto grato :D
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import model.Consulta;
public class ManipulaArquivo {
private String caminho = "PABLOCALTESTE.txt";
public void lerArquivo() {
try {
BufferedReader leitor = AbrirArquivo();
String linha = null;
ArrayList<Consulta> listObjConsulta = new ArrayList<Consulta>();
while ((linha = leitor.readLine()) != null) {
Consulta objConsulta = new Consulta();
int posIni = 0;
int posFim = 0;
posFim = linha.indexOf(";", posIni);
objConsulta.setBilhetador(linha.substring(posIni, posFim));
posIni = linha.indexOf(";", posFim) + 1;
posFim = linha.indexOf(";", posIni);
objConsulta.setOrigem(linha.substring(posIni, posFim));
posIni = linha.indexOf(";", posFim) + 1; // solução encontrada para pular uma coluna no CSV
posIni = linha.indexOf(";", posIni) + 1;
posFim = linha.indexOf(";", posIni);
objConsulta.setDestino(linha.substring(posIni, posFim));
posIni = linha.indexOf(";", posFim) + 1; // solução encontrada para pular uma coluna no CSV
posIni = linha.indexOf(";", posIni) + 1;
posFim = linha.indexOf(";", posIni);
objConsulta.setRotaEntrada(linha.substring(posIni, posFim));
posIni = linha.indexOf(";", posFim) + 1;
posFim = linha.indexOf(";", posIni);
objConsulta.setRotaSaida(linha.substring(posIni, posFim));
posIni = linha.indexOf(";", posFim) + 1;
posFim = linha.indexOf(";", posIni);
objConsulta.setFds(linha.substring(posIni, posFim));
posIni = linha.indexOf(";", posFim) + 1;
posFim = linha.indexOf(";", posIni);
objConsulta.setDataHora(linha.substring(posIni, posFim));
posIni = linha.indexOf(";", posFim) + 1;
posFim = linha.indexOf(";", posIni);
objConsulta.setTtc(linha.substring(posIni, posFim));
listObjConsulta.add(objConsulta);
}
System.out.println(listObjConsulta.size());
} catch (Exception e) {
// TODO: handle exception
}
}
private BufferedReader AbrirArquivo() {
try {
FileReader reader = new FileReader(caminho);
BufferedReader leitor = new BufferedReader(reader, 1 * 512 * 512);
return leitor;
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
}
}
