0 votos
Buenos dias

Estimados soy nuevo por aca, me parece que saben mucho en este foro por eso quiero pedirles ayuda.

Necestio crear un servicio para leer archivos que estan en diferentes rutas, cada ves que estos se creen.
el servcio debe detectar que hay archivos.txt leerlos 1 por 1 y luego insertarlos en una base de datos.

Estimados cualquier idea me servira de mucha ayuda
por en Java

1 Respuesta

0 votos
Mejor respuesta
Hola Eduardo,

has escrito en el foro de Java, por lo que entiendo que necesitas un programa que lea ficheros de texto. Hay muchas maneras de hacer esto, y muchos ejemplos de como hacer esto si buscas en Google: “java read file to string”. Para la base de datos ya tienes que hacer la conexión a un servidor. No sé si es esto lo que necesitas.
por
seleccionada por
Buenos dias!

esa parte ya la tengo echa, el tema es que necesito detectar apenas se cree un archivo el servicio lo detecte para proceder a la lectura e inserccion a la base de datos

Saludos
Si estás trabajando en el servidor tendrás que programar un cron que los lea cada cierto tiempo. Si estás programando Java directamente sobre un servidor Tomcat, nada más crearlo podrías lanzar algún servicio.
Los que hise fue implementar WatchService para escuchar todo el tiempo cuando se crea un archivo nuevo, en las rutas que necesitaba leer los archvos. Luego losinserto en un Base de datos. Ahora solo me queda cranearme como poder hacer la inserción a la base de datos de forma simultanea y no secuencial. ya que el servicio escucha casi 30 directorios.

Suena genial Eduardo, ya casi lo tienes!!!

Ahora solo te queda aplicar unos hilos para terminar lo que necesitas. Es muy fácil, echa un vistazo en http://jarroba.com/multitarea-e-hilos-en-java-con-ejemplos-thread-runnable/

Estimado este es el guardian que escucha los directorios si encuentra archivos, le envia el nombre del archivo a un metodo que lo lee y lo inserta en una base de datos.

public class DemonioHappyland {

public void IniciarGuardian(){

String file;

try {
WatchService watcher = FileSystems.getDefault().newWatchService();
Path dir = Paths.get(“C:\\happyland\\SFC”);
Path dir2 = Paths.get(“C:\\happyland\\HEC”);

dir.register(watcher, ENTRY_CREATE);
dir2.register(watcher, ENTRY_CREATE);

while (true) {
WatchKey key;

try {
// esperando por la llave disponible
key = watcher.take();

} catch (InterruptedException ex) {
return;
}

for (WatchEvent<?> event : key.pollEvents())
{
// Tipo del evento que sucede en la carpeta
WatchEvent.Kind<?> kind = event.kind();

// Nombre del archivo nuevo
@SuppressWarnings(“unchecked”)
WatchEvent<Path> ev = (WatchEvent<Path>) event;
Path fileName = ev.context();

//System.out.println(kind.name() + “: ” + fileName);

if (kind == OVERFLOW) {
continue;
} else if (kind == ENTRY_CREATE && fileName.toString().contains(“SFC”)) {

System.out.println(“Archivo Creado :”+ fileName);

file = fileName.toString();

ValidarArchivos leerArchivos = new ValidarArchivos ();

leerArchivos.validarArchivos(file);

} else if (kind == ENTRY_CREATE && fileName.toString().contains(“HEC”)) {

System.out.println(“Archivo Creado :”+ fileName);

file = fileName.toString();

ValidarArchivos leerArchivos = new ValidarArchivos ();

//array.insertar(file);

leerArchivos.validarArchivos(file);

}

}//fin for

// Resetear la key del proceso una ves finalizada la deteccion de archivos
boolean valid = key.reset();
if (!valid) {
break;
}
}

} catch (IOException ex) {
System.err.println(ex);
}

}

}

me imagino que aca debo implementar los hilos para que detecte un archivo dentro de una de las rutas declaradas y e inserte los datos de forma

paralela?. Agradeseria su ayuda con el tema de los hilos en esta implementacion.

Saludos amigo!! =)

Solo te queda separar el código en hilos. En el anterior ejemplo que te mandé, solo tienes que crearte un par de clases que hereden Thread y seguir el otro tutorial, lo tienes casi hecho :)