2008-09-17 15 views
8

Me gustaría extraer la fecha en que se creó un archivo jpg. Java tiene el método LastModified para el objeto File, pero parece no proporcionar soporte para extraer la fecha creada del archivo. Creo que la información está almacenada en el archivo, ya que la fecha que veo cuando muevo el puntero del mouse sobre el archivo en Win XP es diferente de lo que puedo obtener al usar JNI con "dir/TC" en el archivo en DOS.Cómo obtener una foto de fecha creada en java

Respuesta

10

La información se almacena dentro de la imagen en un formato llamado EXIF o link text. Existen varias bibliotecas por ahí capaces de leer este formato, como this one

+0

¡Genial! ¡Gracias por todos los útiles comentarios! Creo que usaré la biblioteca en drewnoakes.com. – user16029

+0

El formato de archivo de imagen intercambiable (oficialmente Exif, ** no EXIF ​​** según las especificaciones JEIDA/JEITA/CIPA) es un estándar que ... –

0

Probablemente necesite algo para acceder a los datos de exif. Google sugiere this library.

4

puedo utilizar esta biblioteca de metadatos: http://www.drewnoakes.com/code/exif/

parece que funciona bastante bien, a pesar de tener en cuenta que no todas las imágenes JPEG tienen esta información, por lo que no puede ser 100% a prueba de tontos.

Si los metadatos EXIF ​​no contienen la fecha de creación, entonces probablemente tendrá que conformarse con el último actualizado de Java - a menos que desee recurrir a Runtime.exec (...) y usar las funciones del sistema para averiguar (¡No lo recomendaría, sin embargo!)

+0

Sí, funcionó para algunos de mis imágenes, y no funcionó para los datos de imagen almacenados en nuestra base de datos. –

0

El ejemplo de código siguiente pregunta al usuario para una ruta de acceso y salida entonces a la fecha y hora de creación:

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 

public class Main { 

    public static void main(final String[] args) { 
     try { 
      // get runtime environment and execute child process 
      Runtime systemShell = Runtime.getRuntime(); 
      BufferedReader br1=new BufferedReader(new InputStreamReader(System.in)); 
      System.out.println("Enter filename: "); 
      String fname=(String)br1.readLine(); 
      Process output = systemShell.exec("cmd /c dir /a "+fname); 
      // open reader to get output from process 
      BufferedReader br = new BufferedReader (new InputStreamReader(output.getInputStream())); 

      String out=""; 
      String line = null; 

      int step=1; 
      while((line = br.readLine()) != null) 
       { 
       if(step==6) 
       { 
       out=line; 
       } 
       step++; 
       }   // display process output 

      try{ 
      out=out.replaceAll(" ",""); 
      System.out.println("CreationDate: "+out.substring(0,10)); 
      System.out.println("CreationTime: "+out.substring(10,15)); 
      } 
      catch(StringIndexOutOfBoundsException se) 
      { 
       System.out.println("File not found"); 
      } 
      } 
      catch (IOException ioe){ System.err.println(ioe); } 
      catch (Throwable t) { t.printStackTrace();} 
    } 
} 
+1

Gracias por el fragmento de código, pero en realidad necesito obtener la fecha de los metadatos de la imagen , no del sistema de archivos. – user16029

+0

Esto solo funcionará para Windows, también – ScrappyDev

Cuestiones relacionadas