entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Leer carpeta con archivos en JSP

Buenas, de nuevo con la lectura de archivos...
les planteo mi problema...

Tengo que subir 222 archivos(.xls, .xlsx) a una carpeta en el servidor (Esto se hara manual por FTP).

Después de subir los archivos, estos se tienen que ir leyendo de uno por uno, y los datos que tienen estos archivos se tienen que almacenar en la base de datos.

Ya desarrolle un jsp que lea un archivo xls, despúes es pan comido insertarlo a la bd, y solo quedaría diferenciar por el tipo de archivo, si es xls o xlsx, ya que es diferente el código para leer uno de otro.

Mi problema aqui es... como hacer que lea un archivo, y luego pase al siguiente?

No importa el lenguaje de programacíón, lo único que quiero es que me ayuden un poquito con la lógica.
O bien decirme si esto es imposible.

pensando en el problema, llegué a la conclusión que lo más facil es pasarle todas las rutas al jsp que leera los datos y los insertara a la base de datos.
Solo tengo que desarrollar algo que saque las 222 rutas
y hacer algo así

for(i = 0;i < 222;i++) // donde i es la ruta directa del archivo
{
// Lectura de archivo

// Insertar datos a la bd
}

como puedo sacar las rutas de cada archivo en una carpeta?
y como mandar a " i " ruta por ruta

Espero me haya explicado...
Saludos...

3 Respuestas

0voto

Buenas, este es el jsp que desarrolle, recorre una carpeta y por cada archivo que encuentra, lo lee e inserta algunas celdas en la base de datos... ya jala bien todo... solo quise agregar que al final de leer e insertar en la base de datos , elimine el archivo y que siga con el siguiente, el problema es que creo que no cierro bien el archivo y no se cuales son los metodos que se tienen que cerrar.

Llegué a la conclusión de que no se pueden eliminar por que si los quiero eliminar directamente de la carpeta me manda error, por que tomcat los sigue usando.

Class.forName("com.mysql.jdbc.Driver");
            Connection  conexion = DriverManager.getConnection("jdbc:mysql://******:3306/******", "******", "******");

        Statement StMarcador     = conexion.createStatement();
        ResultSet rs_marcador = null;

            //Carpeta donde se guardaran los archivos
            File folder = new File("C:/Servidorweb/apache-tomcat-6.0.37/webapps/Telefonos/Archivos");
            File[] listOfFiles = folder.listFiles();

            //Inicializa array contenedor de nombres de archivos 
            String[] array = new String[listOfFiles.length];

            for (int i = 0; i < listOfFiles.length; i++)  //Recorrido a lista de archivos , se almacenan en array
            {
                if (listOfFiles[i].isFile()) 
                {
                    array[i] = listOfFiles[i].getName();
                    //out.println(array[i]);
                }
            }

            //out.println(array[0]);

            for(int j = 0; j < array.length ;j++) // Recorre archivo por archivo
            {

                //Ruta de Archivo
                FileInputStream fileInputStream = new FileInputStream("C:/Servidorweb/apache-tomcat-6.0.37/webapps/Telefonos/Archivos/" + array[j]);
                HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);

                //Nombre de Hoja del libro Excel
                HSSFSheet worksheet = workbook.getSheet("Detalle de Llamadas");

                //Obtiene la fila numero 3

                    //obtiene el numero de filas 
                int rowsNum = worksheet.getPhysicalNumberOfRows();

                for(int l = 3; l < rowsNum;l++) // Recorre cada fila
                {
                    HSSFRow row1 = worksheet.getRow(l);

                    //Aqui pueden jugar con los valores de la celda, o ya sea crear una iteración que haga un recorrido por todo la hoja de excel
                    HSSFCell cellA1 = row1.getCell((short) 0);
                    String a1Val = cellA1.getStringCellValue();

                    HSSFCell cellB1 = row1.getCell((short) 2);
                    String  b1Val =  new DecimalFormat("############").format(cellB1.getNumericCellValue());

                        //out.println(rowsNum);

                    HSSFCell cellC1 = row1.getCell((short) 3);
                    String c1Val = cellC1.getStringCellValue();

                    String chip = array[j].substring(0,8);

                       a1Val =  a1Val.substring(0,16);
                       String hora = a1Val.substring(10,16);

                       a1Val = a1Val.substring(0,10);

                    DateFormat userDateFormat = new SimpleDateFormat("dd/mm/yyyy");  
                    DateFormat dateFormatNeeded = new SimpleDateFormat("yyyy-dd-mm");  
                    Date date = userDateFormat.parse(a1Val);  
                    String fecha = dateFormatNeeded.format(date); 

                    StMarcador.executeUpdate("insert into smsdetallemarcacion2(sdm_fecha,sdm_tarjetasim,sdm_telefono,sdm_destino,sdm_tipocel,sdm_fechaorig,sdm_horaorig,sdm_minorig,sdm_tipohoraorig,sdm_estatus,sdm_feccarga) VALUES ('"+fecha+hora+":00','"+chip+"','"+b1Val+"','"+c1Val+"','0','0-0-0','0','0','0','0',now());");

                    /*out.println(chip);
                    out.println("A1: " + a1Val.substring(0,16));
                    out.println("B1: " + b1Val);
                    out.println("C1: " + c1Val);*/

                } // Recorre cada fila

                    //Eliminar Archivo
                    String archivostr =  "C:/Servidorweb/apache-tomcat-6.0.37/webapps/Telefonos/Archivos/" + array[j];
                    fileInputStream.close();
                    File archivo = new File(archivostr);
                    //if (archivo.exists()){
                    archivo.delete();

            }     // Recorre archivo por archivo

        out.println("Listo! Datos cargados a la base de datos!");

        StMarcador.close();
       conexion.close();

0voto

Leonardo-Tadei comentado

Me alegra que la orientación que te dí te haya servido.
Gracias por el código!

1voto

Leonardo-Tadei Puntos227020

Hola Alejandro,

la forma más genérica de hacer esto es que tu JSP lea el contenido del directorio (que quedará cargado en un array o en una lista) y luego iteres sobre los datos para leerlos uno a uno.

Si la lista de archivos te queda en un array, por ejemplo, lo recorrés con un bucle for.

Lo único que tal vez debas ver, y esto depende de cómo se lea el contenido del directorio, es ignorar los directorios especiales . y ..

Saludos!

0voto

oscar7685 Puntos330

Si tienes todas los archivos dentro de la misma carpeta y no tienes más nada dentro de ella solo tienes que recorrer cada uno de los archivos que tengas dentro de la carpeta y verificar su extensión para luego leerla como debas algo asi:

 String directorio = request.getSession().getServletContext().getRealPath("/Directorio/");
 File fichero = new File(directorio); 
String[] ficheros = fichero.list(); // sacamos cada uno de los archivos dentro del directorio
for (int i = 0; i < ficheros.length; i++) { //los recorremos
 /*cortamos el nombre del archivo por el punto para conocer la extension del archivo (xls, o xlsx) */
String elementos[] = ficheros[i].split("\\.");
String extension = elementos[elementos.length-1];
if(extension.equals("xls")){
....
}else if(extension.equals("xlsx")){
......
}

                    }

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta