كيفية الحصول على تاريخ إنشاء الصورة في جافا

StackOverflow https://stackoverflow.com/questions/83787

  •  01-07-2019
  •  | 
  •  

سؤال

أرغب في استخراج تاريخ إنشاء ملف jpg.تحتوي Java على الأسلوب lastModified لكائن الملف، ولكن يبدو أنها لا توفر أي دعم لاستخراج تاريخ الإنشاء من الملف.أعتقد أن المعلومات مخزنة داخل الملف لأن التاريخ الذي أراه عندما أقوم بتمرير مؤشر الماوس فوق الملف في Win XP يختلف عما يمكنني الحصول عليه باستخدام JNI مع "dir /TC" على الملف في DOS.

هل كانت مفيدة؟

المحلول

يتم تخزين المعلومات داخل الصورة بتنسيق يسمى إكسيف أو نص الرابط.هناك العديد من المكتبات القادرة على قراءة هذا التنسيق، مثل هذا

نصائح أخرى

يتم تخزين التاريخ في إكسيف البيانات في الحياة السياسية في فرنسا.هناك مكتبة جافا و أ عارض في جافا قد يكون ذلك مفيدًا.

أستخدم مكتبة البيانات الوصفية هذه: http://www.drewnoakes.com/code/exif/

يبدو أنه يعمل بشكل جيد، على الرغم من أنه يجب الأخذ في الاعتبار أنه ليست كل صور JPEG تحتوي على هذه المعلومات، لذا لا يمكن أن تكون آمنة بنسبة 100%.

إذا كانت بيانات تعريف EXIF ​​لا تحتوي على تاريخ الإنشاء، فمن المحتمل أن تضطر إلى الاكتفاء بآخر تحديث لـ Java - إلا إذا كنت تريد اللجوء إلى Runtime.exec(...) واستخدام وظائف النظام لمعرفة ذلك (أود أن' لا أوصي بهذا، رغم ذلك!)

يطلب مثال الكود أدناه من المستخدم مسار الملف ثم يقوم بإخراج تاريخ ووقت الإنشاء:

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();}
    }
}

ربما تحتاج إلى شيء للوصول إلى com.exif بيانات.يقترح جوجل هذه المكتبة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top