2008-09-17 15 views
8

Chciałbym wyodrębnić datę utworzenia pliku jpg. Java ma metodę LastModified dla obiektu File, ale wydaje się nie obsługiwać wyodrębniania utworzonej daty z pliku. Wierzę, że informacje są przechowywane w pliku, ponieważ data, którą widzę po najechaniu wskaźnikiem myszki na plik w Win XP jest inna niż to, co mogę uzyskać za pomocą JNI z "dir/TC" na pliku w DOS.Jak uzyskać obraz daty utworzony w java

Odpowiedz

10

Informacje są przechowywane w obrazie w formacie o nazwie EXIF lub link text. Tam kilka bibliotek tam zdolne do odczytu tego formatu, jak this one

+0

Świetnie! Dzięki za wszystkie pomocne komentarze! Wierzę, że skorzystam z biblioteki w portalu drewnoakes.com. – user16029

+0

Wymienny format pliku obrazu (oficjalnie Exif, ** nie EXIF ​​** zgodnie ze specyfikacją JEIDA/JEITA/CIPA) to standard, który ... –

0

Prawdopodobnie potrzebujesz czegoś, aby uzyskać dostęp do danych exif. Google sugeruje this library.

4

używam tej biblioteki Metadane: http://www.drewnoakes.com/code/exif/

wydaje się całkiem dobrze, choć należy pamiętać, że nie wszystkie obrazy JPEG mają te informacje, więc nie może być w 100% idiotoodporny.

Jeśli metadane EXIF ​​nie zawierają utworzonej daty, prawdopodobnie będziesz musiał zrobić to z lastUpdated Java - chyba że chcesz uciekać się do Runtime.exec (...) i korzystając z funkcji systemu, aby dowiedzieć się (Nie polecam tego!)

+0

Tak, pracował dla niektórych moje obrazy i nie działały dla danych obrazu przechowywanych w naszej bazie danych. –

0

Przykładowy kod poniżej prosi użytkownika o podanie ścieżki do pliku, a następnie wyświetla datę utworzenia i czas:

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

Dzięki za fragment kodu, ale muszę uzyskać datę z metadanych obrazu , nie z systemu plików. – user16029

+0

To będzie działać tylko dla systemu Windows – ScrappyDev