如何用java获取一个文件的创建时间

如何用java获取一个文件的创建时间,第1张

 java没有函数能直接拿到文件的创建时间lastModified()只能获得最后一次修改时间

 想要拿到创建时间必须依赖Windows系统的API,通过调CMD命令实现,

 代码如下:

 public static void main(String[] args) {  

        try {  

            Process p = RuntimegetRuntime()exec(  

                    "cmd /C dir d:\\testtxt /tc");  

            InputStream is = pgetInputStream();  

            BufferedReader br = new BufferedReader(new InputStreamReader(is));  

            String str;  

            int i = 0;  

            while ((str = brreadLine()) != null) {  

                i++;  

                if (i == 6) {  

                    Systemoutprintln(strsubstring(0, 17));  

                }  

            }  

  

        } catch (javaioIOException exc) {  

            excprintStackTrace();  

        }  

    }

你们这些人都不看MSDN啊?

FileGetCreationTime 方法

NET Framework 4 其他版本 NET Framework 35

NET Framework 30

NET Framework 20

Silverlight

返回指定文件或目录的创建日期和时间。

命名空间: SystemIO

程序集: mscorlib(在 mscorlibdll 中)

语法

--------------------------------------------------------------------------------

C#C++F#VB

复制

public static DateTime GetCreationTime(

string path

)

参数

path

类型:SystemString

要获取其创建日期和时间信息的文件或目录。

返回值

类型:SystemDateTime

一个 DateTime 结构,它被设置为指定文件或目录的创建日期和时间。 该值用本地时间表示。

在Linux中,没有文件创建时间的概念。只有文件的访问时间、修改时间、状态改变时间。也就是说不能知道文件的创建时间。但如果文件创建后就没有修改过,修改时间=创建时间;如果文件创建后,状态就没有改变过,那么状态改变时间=创建时间;如果文件创建后,没有被读取过,那么访问时间=创建时间,这个基本不太可能。

与文件相关的几个时间:

1、访问时间,读一次这个文件的内容,这个时间就会更新。比如对这个文件使用more命令。ls、stat命令都不会修改文件的访问时间。

2、修改时间,对文件内容修改一次,这个时间就会更新。比如:vi后保存文件。ls -l列出的时间就是这个时间。

3、状态改变时间。通过chmod命令更改一次文件属性,这个时间就会更新。查看文件的详细的状态、准确的修改时间等,可以通过stat命令 文件名。

比如: [jing@zhjh c]$ stat tempc

引用:

File: 'tempc'

Size: 66 Blocks: 8 IO Block: 4096 \u4e00\u822c\u6587\u4ef6

Device: 807h/2055d Inode: 1191481 Links: 1

Access: (0664/-rw-rw-r--) Uid: ( 500/ jing) Gid: ( 500/ jing)

Access: 2008-03-12 20:19:45000000000 0800

Modify: 2008-03-12 20:19:45000000000 0800

Change: 2008-03-12 20:19:45000000000 0800

说明:Access访问时间。Modify修改时间。Change状态改变时间。可以stat 查看这个目录所有文件的状态。

数据库中的文件的话,要adb shell进去查看数据库有没有该字段。存储卡上的文件的话,java中没有获取文件创建事件的接口。

一、 从resource中的raw文件夹中获取文件并读取数据(资源文件只能读不能写)

String res = "";

try{

InputStream in = getResources()openRawResource(Rrawbbi);

//在\Test\res\raw\bbitxt,

int length = inavailable();

byte [] buffer = new byte[length];

inread(buffer);

//res = EncodingUtilsgetString(buffer, "UTF-8");

//res = EncodingUtilsgetString(buffer, "UNICODE");

res = EncodingUtilsgetString(buffer, "BIG5");

//依bbitxt的编码类型选择合适的编码,如果不调整会乱码

inclose();

}catch(Exception e){

eprintStackTrace();

}

myTextViewsetText(res);//把得到的内容显示在TextView上

二、 从asset中获取文件并读取数据(资源文件只能读不能写)

String fileName = "yantxt"; //文件名字

String res="";

try{

InputStream in = getResources()getAssets()open(fileName);

// \Test\assets\yantxt这里有这样的文件存在

int length = inavailable();

byte [] buffer = new byte[length];

inread(buffer);

res = EncodingUtilsgetString(buffer, "UTF-8");

}catch(Exception e){

eprintStackTrace();

}

三、 从sdcard中去读文件,首先要把文件通过\android-sdk-windows\tools\adbexe把本地计算机上的文件copy到sdcard上去,adbexe push e:/Ytxt /sdcard/, 不可以用adbexe push e:\Ytxt \sdcard\ 同样: 把仿真器上的文件copy到本地计算机上用: adb pull /data/data/comtt/files/Testtxt e:/

String fileName = "/sdcard/Ytxt";

//也可以用String fileName = "mnt/sdcard/Ytxt";

String res="";

try{

FileInputStream fin = new FileInputStream(fileName);

//FileInputStream fin = openFileInput(fileName);

//用这个就不行了,必须用FileInputStream

int length = finavailable();

byte [] buffer = new byte[length];

finread(buffer);

res = EncodingUtilsgetString(buffer, "UTF-8");

finclose();

}catch(Exception e){

eprintStackTrace();

}

myTextViewsetText(res);

Java只能读取到文件的最后修改时间,不能获取创建时间,

创建时间是利用了cmd命令获取的:

public class FileTest {

 

 public static void main(String[] args) {

  getCreateTime("d:\\test-1txt");

  getModifiedTime("d:\\test-1txt");

 }

 

 public static void getCreateTime(String filePath) {

  String strTime = null;

  try {

   Process p = RuntimegetRuntime()exec("cmd /C dir " + filePath + "/tc");

   InputStream is = pgetInputStream();

   BufferedReader br = new BufferedReader(new InputStreamReader(is));

   String line;

   while ((line = brreadLine()) != null) {

    if (lineendsWith("txt")) {

     strTime = linesubstring(0, 17);

     break;

    }

   }

  } catch (IOException e) {

   eprintStackTrace();

  }

  Systemoutprintln("创建时间    " + strTime);

 }

 public static void getModifiedTime(String filePath) {

  long time = new File(filePath)lastModified();

  String ctime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")format(new Date(time));

  Systemoutprintln("修改时间[1] " + ctime);

 }

}

java是用native来获取 *** 作系统的支持,从而对文件进行 *** 作。

具体实现类是

javaioFileSystem

这个类是私有的只能在jdk内部使用,由于这个类没有提供文件时间创建的接口,你也就没有办法用纯java来获得这一个功能(但愿不是这样)。

有一个简单的方法是自己调用系统函数,或者干脆调用各C函数

先写各本地类访问方法

class MyFileSystem{

public native void getCreatFileTime(File f);

static {

SystemloadLibrary( " ");

}

public static void main(String[] args) {

new HelloWorld()getCreatFileTime();

}

}

编译本文件

然后执行 javah,便会自动产生头文件 MyFileSystemh

函数的具体实现如下:

#include <jnih>

#include "MyFileSystemh "

#include <stdioh>

JNIEXPORT double JNICALL

Java_MyFileSystem_displayHelloWorld(JNIEnv env, jobject obj)

{

//在这里调用C函数

double time=getFileCreatTime_IN_C(obj)

return time;

}

我也在解决这方面的问题,这是我找到的,希望对你有所帮助。

以上就是关于如何用java获取一个文件的创建时间全部的内容,包括:如何用java获取一个文件的创建时间、C#中怎样获取文件的创建时间具体的代码怎么写、如何在Linux *** 作系统查看文件创建时间等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9398438.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存