Java和jni(获得指定文件创建时间)_第1页
Java和jni(获得指定文件创建时间)_第2页
Java和jni(获得指定文件创建时间)_第3页
Java和jni(获得指定文件创建时间)_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/前言:在我写这篇文章之前,我说说我的碰到这个问题的起因。公司让我写一个jar包,需要获得指定文件的创建日期(日期必须是完整地年月日时分秒)。对于javajdk1.7来说很容易,因为1.7给了我们获得创建日期的接口。但是对于jdk1.6来说,那就是一个老大难,没有提供,只提供了获得最后修改日期的接口。个人收集整理勿做商业用途对于jdk1.6,当然我也查过,请教过好多人,给出了解决办法,那就是使用Java的Runtime去调用当前操作系统的指令获得文件的创建日期:个人收集整理勿做商业用途例如在windows下,publicStringgetFileCreateDate(File_file){Filefile=_file;

try{

Processls_proc=Runtime.getRuntime().exec(

"cmd.exe/cdir"+file.getAbsolutePath()+"/tc");

个人收集整理勿做商业用途BufferedReaderbr=newBufferedReader(newInputStreamReader(ls_proc.getInputStream()));

个人收集整理勿做商业用途for(inti=0;i<5;i++){

br.readLine();

}

Stringstuff=br.readLine();

StringTokenizerst=newStringTokenizer(stuff);

StringdateC=st.nextToken();

Stringtime=st.nextToken();

Stringdatetime=dateC.concat(time);

SimpleDateFormatformatter1=newSimpleDateFormat("yyyy-MM-ddhh:mm:ss");

个人收集整理勿做商业用途SimpleDateFormatformatter2=newSimpleDateFormat(

个人收集整理勿做商业用途"yyyy/MM/ddHH:mm");

datetime=formatter1.format(formatter2.parse(datetime));

个人收集整理勿做商业用途

br.close();

returndatetime;

}catch(Exceptione){

returnnull;

}

}引用:/question/535215288.html但是这个方法只能或得到文件的年月日时分,不能获得到秒。为了获得到秒,最后使用了jni。步骤:1、使用c和C++写一个获得文件创建时间的类#pragmaonce//Modifythefollowingdefinesifyouhavetotargetaplatformpriortotheonesspecifiedbelow.//RefertoMSDNforthelatestinfooncorrespondingvaluesfordifferentplatforms.#ifndefWINVER//AllowuseoffeaturesspecifictoWindowsXPorlater.#defineWINVER0x0501//ChangethistotheappropriatevaluetotargetotherversionsofWindows.#endif#ifndef_WIN32_WINNT//AllowuseoffeaturesspecifictoWindowsXPorlater.#define_WIN32_WINNT0x0501//ChangethistotheappropriatevaluetotargetotherversionsofWindows.#endif#ifndef_WIN32_WINDOWS//AllowuseoffeaturesspecifictoWindows98orlater.#define_WIN32_WINDOWS0x0410//ChangethistotheappropriatevaluetotargetWindowsMeorlater.#endif#ifndef_WIN32_IE//AllowuseoffeaturesspecifictoIE6.0orlater.#define_WIN32_IE0x0600//ChangethistotheappropriatevaluetotargetotherversionsofIE.#endif#defineWIN32_LEAN_AND_MEAN//Excluderarely-usedstufffromWindowsheaders//WindowsHeaderFiles:#include<windows.h>个人收集整理勿做商业用途

//WinFileTime.cpp:DefinestheentrypointfortheDLLapplication.//#include"stdafx.h"#include"FileClass/FileTimeEx.h"#ifdef_MANAGED#pragmamanaged(push,off)#endifBOOLAPIENTRYDllMain(HMODULEhModule,DWORDul_reason_for_call,LPVOIDlpReserved){returnTRUE;}JNIEXPORTjstringJNICALLJava_checkfile_WinFileTime_getFileCreationTime(JNIEnv*env,jobjectcls,jstringFileName){HANDLEhFile;FILETIMEcreationTime;FILETIMElastAccessTime;FILETIMElastWriteTime;FILETIMEcreationLocalTime;SYSTEMTIMEcreationSystemTime;jstringresult;charfileTimeString[30];hFile=CreateFileA((char*)env->GetStringUTFChars(FileName,0),GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);if(hFile==INVALID_HANDLE_VALUE)returnenv->NewStringUTF("");if(GetFileTime(hFile,&creationTime,&lastAccessTime,&lastWriteTime)){if(FileTimeToLocalFileTime(&creationTime,&creationLocalTime)){if(FileTimeToSystemTime(&creationLocalTime,&creationSystemTime)){sprintf_s(fileTimeString,"d-d-dd:d:d\0",creationSystemTime.wYear,creationSystemTime.wMonth,creationSystemTime.wDay,creationSystemTime.wHour,creationSystemTime.wMinute,creationSystemTime.wSecond),result=env->NewStringUTF(fileTimeString);}elseresult=env->NewStringUTF("");}elseresult=env->NewStringUTF("");}elseresult=env->NewStringUTF("");CloseHandle(hFile);returnresult;}#ifdef_MANAGED#pragmamanaged(pop)#endif个人收集整理勿做商业用途2、然后生成动态链接文件(*.dll),将这个文件放到C:\Windows\System32和你的javajdk目录下D:\ProgramFiles\Java\jdk1.6.0_18\jre\bin。个人收集整理勿做商业用途3、java文件中写法publicfinalclassWinFileTime{static{System.loadLibrary("WinFileTime");}privatestaticnativeStringgetFileCreationTime(StringfileName);publicstaticStringgetCreationTime(StringfileName){returngetFileCreationTime(fileName);}}}个人收集整理勿做商业用途注意:头文件与类文件的方法名必须与java中的类名一直,如:c中是Java_checkfile_WinFileTime_getFileCreationTime,那么java中就是checkfile.WinFileTime.getFileCreationTime(checkfile是包名,WinFileTime是类名,getFileCreationTime是方法名).个人收集整理勿做商业用途jdk1.7方法:下载一个jdk1.7帮助文档,看看这个类BasicFileAttributeView。Pathpath=Paths.get(filePath);

BasicFileAttributeViewbasicview=Files.getFi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论