2008-09-17 26 views
8

Tôi muốn trích xuất ngày một tệp jpg được tạo. Java có phương thức lastModified cho đối tượng File, nhưng dường như không hỗ trợ cho việc trích xuất ngày tạo ra từ tệp. Tôi tin rằng thông tin được lưu trữ trong tệp như ngày tôi thấy khi tôi di chuột qua tệp trong Win XP khác với những gì tôi có thể nhận được bằng cách sử dụng JNI với "dir/TC" trên tệp trong DOS.Cách lấy ảnh ngày được tạo trong java

Trả lời

10

Thông tin được lưu trữ trong hình ảnh ở định dạng được gọi là EXIF hoặc link text. Có một số thư viện ra có khả năng đọc định dạng này, như this one

+0

Tuyệt vời! Cảm ơn tất cả các ý kiến ​​hữu ích! Tôi tin rằng tôi sẽ sử dụng thư viện tại drewnoakes.com. – user16029

+0

Định dạng tệp hình ảnh có thể thay đổi (chính thức Exif, ** không phải EXIF ​​** theo thông số kỹ thuật JEIDA/JEITA/CIPA) là một tiêu chuẩn ... –

0

Có thể bạn cần một thứ gì đó để truy cập dữ liệu exif. Google đề xuất this library.

4

tôi sử dụng thư viện siêu dữ liệu này: http://www.drewnoakes.com/code/exif/

vẻ làm việc khá tốt, mặc dù nhớ rằng không phải tất cả các hình ảnh JPEG có thông tin này, vì vậy nó không thể là 100% fool-proof.

Nếu siêu dữ liệu EXIF ​​không chứa ngày tạo, thì có thể bạn sẽ phải thực hiện với LastUpdated của Java - trừ khi bạn muốn sử dụng Runtime.exec (...) và sử dụng các chức năng hệ thống để tìm hiểu (Tôi sẽ không đề nghị điều này, mặc dù!)

+0

Yeah, nó làm việc cho một số hình ảnh của tôi và không hoạt động cho dữ liệu hình ảnh được lưu trữ trong cơ sở dữ liệu của chúng tôi. –

0

Đoạn mã ví dụ dưới đây yêu cầu người dùng cho một đường dẫn tập tin và sau đó kết quả đầu ra ngày tạo và thời gian:

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

Cảm ơn đoạn mã, nhưng tôi thực sự cần lấy ngày từ siêu dữ liệu hình ảnh , không phải từ hệ thống tệp. – user16029

+0

Điều này cũng chỉ hoạt động với Windows – ScrappyDev

Các vấn đề liên quan