Explorando archivos en lugares remotos con JSF/Icefaces

Necesito hacer una solucion que me permita explorar carpetas de varios servidores remotos con Linux al cual puedo acceder de varias formas(ssh,ftp,nfs etc) para obtener la ruta de cualquier archivo. Lo primero que se me ocurrio fue aprovechar los componentes fileUpload de Icefaces y JSF pero lo que descubri fue que ninguno de ellos me permite obtener el valor (la ruta) sin antes subir el archivo a la maquina donde esta la aplicacion por lo que no me sirven.

He estado pensando en llamar varios scripts de shell desde la aplicacion para hacer listados de directorio de manera recursiva en un share de NFS pero no me parece la solucion mas sencilla o elegante. ¿De que otras formas podria lograrlo?

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

java.io.File

Si necesitas desde Java estar recorriendo el filesystem, simplemente puedes crear un File con el directorio raíz que quieres navegar y de ahí usar los métodos list() o listFiles(), que te devuelven respectivamente una lista de cadenas con los nombres de los archivos y directorios contenidos en el File (suponiendo que sea un directorio), y una lista de Files que representan los archivos y directorios contenidos en el File.

El segundo método te puede convenir más si piensas recorrer de manera recursiva un árbol de directorios, porque la lista va a ser de FIles, por lo que a cada elemento le puedes preguntar isDirectory() para saber si te metes a navegarlo.

Todo eso sirve si tienes acceso por NFS a los directorios remotos. Para acceso por ssh te recomiendo le eches un ojo al sshfs que te permite montar directorios remotos a través de SSH. Por FTP no sé si haya algo similar, en todo caso sería cosa de que busques un cliente FTP en Java que seguro hay varios.

Excelente, ya estoy haciendo

Excelente, ya estoy haciendo las pruebas con File, exactamente lo que necesito. Gracias!

Imagen de benek

Problema similar.

Aprovechando el tema, yo tengo un problema más o menos similar.

Tengo un editor de texto enriquecido, del contenido de ahí creo un PDF vía java.io.File, o sea en el contexto del sistema de archivos. El problema es que luego necesitos abrir ese PDF para mostrarlo, pero la librería que utilizo para mostrarlo no lo toma del contexto del sistema de archivos, sino que lo toma del contexto de la webapp. Una solución rápida es definir en el código la ruta del deployment en el sistema de archivos y crear ahí los PDF's, pero la portabilidad se va al suelo y el riesgo al cambiar de servidor de aplicaciones o de ambiente es muy alto.

Jali me dio la idea de crear un symbolic link en el sistema de archivos que apunte a la carpeta en la que está el deployment en ese equipo/ambiente. La solución ya es mejor que la anterior, pero aún así no me termina de convencer al 100%.

¿A alguno de ustedes se les ocurre otra solución?

Saludos.

Javier Ramírez Jr.

Imagen de ezamudio

contexto de webapp - InputStream

Revisa bien la librería que estás usando porque si toma el PDF del contexto de la aplicación, seguramente al final maneja un InputStream (el cual obtiene de getResourceAsStream() de un ClassLoader o algo similar). Debe haber manera en que le pases tú un InputStream en vez de la ruta al recurso dentro del contexto de la aplicación; de esa manera abres un FileInputStream del PDF que creaste por fuera en el filesystem y lo pasas a la librería en cuestión. Solamente debes revisar si ese InputStream lo va a cerrar la librería al final (lo más probable) o si lo tienes que cerrar tú después (lo cual va a complicar las cosas).