Skip to content

rxvc/filereader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Para utilizar el lector de archivos fileReader se debe realizar lo siguiente:

Suponemos que el problema es leer un archivo plano, donde cada fila representa un objeto de determinada clase que tenemos en nuestro sistema.
vamos a suponer que esa clase es un cliente.

Suponemos que el archivo plano es separado por comas (,) y que además tiene la siguiente estructura
ruc(Texto),nombre(Texto),edad(Numero entero),fecha de nacimiento(Fecha),valor(NUmero decimal).
ej:
1569452125,Cliente A,20,15/01/1990,2336.55
1869361126,Cliente B,20,16/12/1990,45.55
0563245823,Cliente C,20,13/08/1990,123123.55
0169215446,Cliente D,20,14/06/1990,789.55
1769452127,Cliente E,20,19/05/1990,5675.55.

Lo primero que hay que hacer es crear una clase Cliente con los campos necesarios (con getters y setters)
ej:
class Cliente {
	private String ruc;
	private String nombre;
	private Integer edad;
	private Date fechaNac;
	private Double valor;
}

luego se debe crear una clase que implemente la interfaz ObjectValidator<T>
se debe implementar el metodo validate(T o) throws ObjectValidationException 
ej:
class CustomerValidator implements ObjectValidator<Cliente>{
	public void validate(Customer o) throws ObjectValidationException {
		// definir logica de validacion
		// si no cumple arrojar la excepcion
	}
}

después se debe crear una clase que implemente la interfaz ObjectExecutor<T>
se debe implmentar los siguientes metodos
public class CustomerExecutor implements ObjectExecutor<Cliente> {
	public void execute(Customer o) throws ObjectExecutionException {
		// Este es el metodo que se ejecutara luego de:
		//  1: leer una fila del archivo plano
		//	2: convertir en objeto de tipo Cliente
		//	3: pasar la validacion exitosamente
	}
	
	public void onConversionError(Throwable t, Map<String, Object> aditionalInfo) throws ObjectExecutionException {
		// Este metodo se ejecura si se produce cualquier error en la conversion de una fila del archivo
		// Si se arroja la excepcion ObjectExecutionException entonces se detendra la lectura de las filas restantes del archivo
		// aquí se puede ejecutar cualquier accion que se desee (log de errores, guardar error en la base, etc), 
		// si no se arroja ObjectExecutionException, la lectura de las siguientes lineas del archivo continua normalmente
	}
	
	public void onValidationError(Throwable t, Map<String, Object> aditionalInfo) throws ObjectExecutionException {
		// Este metodo se ejecura si el validador arroja la excepcion ObjectValidationException
		// Si se arroja la excepcion ObjectExecutionException entonces se detendra la lectura de las filas restantes del archivo
		// aquí se puede ejecutar cualquier accion que se desee (log de errores, guardar error en la base, etc), 
		// si no se arroja ObjectExecutionException, la lectura de las siguientes lineas del archivo continua normalmente
	}
	
	public void onExecutionError(Throwable t, Map<String, Object> aditionalInfo) throws ObjectExecutionException {
		// Este metodo se ejecutara si en el metodo execute de esta clase se arroja la excepcion declarada.
		// Si se vuelve a arrojar la excepcion en este método se detendra la lectura de las filas restantes del archivo 
		// aquí se puede ejecutar cualquier accion que se desee (log de errores, guardar error en la base, etc), 
		// si no se arroja la excepcion, la lectura de las siguientes lineas del archivo continua normalmente
	}
}

El siguiente paso es anotar a la clase Cliente y a sus propiedades
ej:
@FD(columnSeparator = ",", name = "Cliente", validator = CustomerValidator.class)
class Cliente {
	@FCD(position = 0)
	private String ruc;
	@FCD(position = 1)
	private String nombre;
	@FCD(position = 2)
	private Integer edad;
	@FCD(position = 3, datePattern="dd/MM/yyyy")
	private Date fechaNac;
	@FCD(position = 4, optional=true)
	private Double valor;
	
	// no importa si se tienen mas propiedades
	private String a, b, c;
}

la anotacion @FD (FileDefinition) define a cada fila del archivo (el separador y la clase que realizara la validacion), el nombre solo es descriptivo
la anotacion @FCD (FileColumnDefinition) define la metadata de cala columna de las filas del archivo

Las tres clases que fueron descritas se deben crear en cualquier aplicacion o libreria o lo que les de la gana.

El paso final es proceder a leer el archivo de la siguiente forma
ej:
{
 	...
 	byte[] archivo; // bytes del archivo plano
 	...
 	CustomerExecutor executor = new CustomerExecutor();
 	FileReader reader = new AnnotatedFilePlainReader<Cliente>(archivo, executor, Customer.class);
 	
 	try {
			fr.read();
			// todo OK
		} catch (FileReadingException e) {
			// si se detiene la lectura del archivo
		}
 }
 
 En el metodo execute del CustomerExecutor tenderemos un objeto de tipo cliente con valor en las propiedades anotadas

About

Filereader

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages