كيفية الحصول على تاريخ إنشاء الصورة في جافا
سؤال
أرغب في استخراج تاريخ إنشاء ملف 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 بيانات.يقترح جوجل هذه المكتبة.