Java ConjuntoDatos Class: Reading and Processing Text File Data
ConjuntoDatos Class in Java
public ConjuntoDatos(File archivoTexto, String separador, Locale locale) throws Exception {
this.archivoTexto = archivoTexto;
this.separador = separador;
this.locale = locale;
cabecera = cabecera(this.archivoTexto);
numeroLineas = numLineas(this.archivoTexto);
numeroColumnas = numColumnas(this.archivoTexto);
datos = leerDatos(this.archivoTexto, numeroLineas, numeroColumnas);
}
Reading the Header
private List cabecera(File archivoTexto) throws Exception {
cabecera = new ArrayList();
Scanner fichero = new Scanner(archivoTexto);
String primeraLinea = fichero.nextLine();
Scanner scLinea = new Scanner(primeraLinea);
scLinea.useDelimiter(separador);
scLinea.useLocale(locale);
while (scLinea.hasNext()) {
String columna = scLinea.next();
cabecera.add(columna);
}
fichero.close();
return cabecera;
}
Counting Lines
private int numLineas(File archivoTexto) throws Exception {
numeroLineas = 0;
Scanner fichero = new Scanner(archivoTexto);
fichero.nextLine();
while (fichero.hasNextLine()) {
fichero.nextLine();
numeroLineas++;
}
fichero.close();
return numeroLineas;
}
Counting Columns
public int numColumnas(File archivoTexto) {
numeroColumnas = cabecera.size();
return numeroColumnas;
}
Reading the Data
public double[][] leerDatos(File archivoTexto, int filas, int columnas) throws Exception {
datos = new double[filas][columnas];
Scanner fichero = new Scanner(archivoTexto);
fichero.nextLine();
for (int i = 0; i < filas; i++) {
String linea = fichero.nextLine();
Scanner scLinea = new Scanner(linea);
scLinea.useDelimiter(separador);
scLinea.useLocale(locale);
for (int j = 0; j < columnas; j++) {
datos[i][j] = scLinea.nextDouble();
}
}
fichero.close();
return datos;
}
Retrieving a Column
public double[] getColumna(int columna) {
double[] a = new double[numeroLineas];
for (int i = 0; i < numeroLineas; i++) {
a[i] = datos[i][columna];
}
return a;
}