Echando código: ¿Como saber de que tipo es un archivo, desde JAVA?

Con JNI nos podemos ir a bajo nivel con el sistema operativo. Una rubia en la foto :)
En un articulo anterior les habia comentado como trabajar con JNI y Java. En esta ocasión escogí un problema un poco más complicado, ya que el anterior parecía más un "Hola Mundo" que otra cosa (si, pasos de bebé).
Así que como la necesidad es la madre de todas las invenciones, me decidí a probar un ejemplo que tenia ganas de poner en práctica desde hace tiempo. En este caso se trata de como obtener el tipo de un archivo utilizando la herramienta file en UNIX, pero primero veamos si Java puede hacer lo mismo.
En Java podemos utilizar Swing para obtener el tipo del archivo. Leí que clase JFileChooser de Swing te da información similar, pero es basado en la extensión del archivo:
1:import javax.swing.JFileChooser;Corriendo el programita:
2:import java.io.File;
3:
4:public class FileType {
5: public static void main(String [] args) throws Exception {
6: JFileChooser view = new JFileChooser();
7: String descr = view.getTypeDescription(new File(args[0]));
8: System.out.println("File type is: " + descr);
9: }
10:}
[josevnz@localhost ~]$ javac FileType.java -d .
[josevnz@localhost ~]$ java FileType DS156_Complete.pdf
File type is: Generic File
[josevnz@localhost ~]$
Poco satisfactorio, por no decir otra cosa. Sin embargo todo el mundo sabe como obtener el tipo de un archivo desde unix, utilizando 'file':
[josevnz@localhost ~]$ file DS156_Complete.pdfFile es una de mis herramientas favoritas. File consulta una base de datos en la cual están registrados los formatos y utilizando reglas heuristicas determina el verdadero tipo del archivo. Ahora, supongamos que quiero tener la misma funcionalidad desde uno de mis programas en Java, ¿como hacer?
DS156_Complete.pdf: PDF document, version 1.3
[josevnz@localhost ~]$
Lo primero es averiguar como los verdaderos expertos lo hacen. Hay que utilizar JNI ya que quiero tomar ventaja de que el código de file va a utilizar la base de datos que viene con cada sistema operativo UNIX y no me importa sacrificar portabilidad.
Así que después buscar cuidadosamente en Google, finalmente encontré la página oficial del comando 'file'.
Sin embargo ya alguién se topó con el problema y decidió hacer una interfaz en Java la cual hace todo el trabajo: Java shared mime info.
Así que esas son las opciones. Les dejo la de Java, aunque otros lenguajes ya tienen sus respectivas implementaciones.
Blogalaxia.com:file, java, linux, open source, venezuela, libmagic, jmimeinfo
Technorati.com:file, java, linux, open source, venezuela, libmagic, jmimeinfo
Etiquetas: file, java, jmimeinfo, libmagic, linux, open source, venezuela



0 Comentarios:
Publicar un comentario en la entrada
Enlaces a este articulo:
Crear un vínculo
<< Regresar