`
zhangbug
  • 浏览: 33854 次
  • 性别: Icon_minigender_1
  • 来自: 呼和浩特
社区版块
存档分类
最新评论

Java获得文件创建时间

    博客分类:
  • Java
阅读更多
最近被文件创建时间搞的很郁闷,在CSDN和Javaeye上发贴问了很多高人,感慨跨平台的东西不一定就是最实用的.一个小小的时间字符串就要这么麻烦.
Java的File类只提供了一个获取文件最后一次修改时间的方法lastModified().官方API中描述为"返回此抽象路径名表示的文件最后一次被修改的时间."
听听来自CSDN的声音:
  1. "UNIX或LINUX平台下文件系统中就没有保存文件的创建时间,只有文件的最后修改的时间。否则的话,JAVA中File类就应该有支持这个属性的方法了."
  2. "在Linux中,没有文件创建时间的概念.只有文件的访问时间、修改时间、状态改变时间.也就是说不能知道文件的创建时间."
  3. "若LINUX下文件创建好以后全是文件读操作(没有执行过存盘操作),则取的文件修改时间就是文件创建的时间."
  4. "我想在LINUX下,就以修改时间为你的文件时间.如:只要不改文件就行.
  5. 方法:如要获取文件mydata.dat,则: 命令:ls --full-time mydata.dat 显示结果:-rw-r--r-- 1 root root 0 2008-04-26 22:47:50.000000000 +0800 mydata.dat 上边红色的就是你要的.你就用JAVA直接取吧.上述ls命令外,用的是最后修改时间,倒不如直接用JAVA的File类取最后修改时间了"

基于以上讨论,下面方法仅限于Windows平台.
通过Java JNI取得文件创建时间.需要用到VC++6.0.
[list]
  • 在VC中创建一个Win32 Dynamic-Link Library工程MyFileTime
  • 添加头文件MyFileTime.h,内容为
  • #include <jni.h>
    /* Header for class MyFileTime */
    
    #ifndef _Included_MyFileTime
    #define _Included_MyFileTime
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     MyFileTime
     * Method:    getFileCreationTime
     * Signature: (Ljava/lang/String;)Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_cn_imu_jni_MyFileTimegetFileCreationTime
      (JNIEnv *, jobject, jstring);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
  • 添加C++类文件MyFileTime.cpp,内容为
  • #include <windows.h>
    #include "MyFileTime.h"
    
    JNIEXPORT jstring JNICALL Java_cn_imu_jni_MyFileTime_getFileCreationTime(JNIEnv *env, jobject cls, jstring FileName)
    {
        HANDLE hFile;
        FILETIME creationTime;
        FILETIME lastAccessTime;
        FILETIME lastWriteTime;
        FILETIME creationLocalTime;
        SYSTEMTIME creationSystemTime;
        jstring result;
        char fileTimeString[30];
        
        hFile = CreateFile((char *)env->GetStringUTFChars(FileName, 0), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
        if(hFile == INVALID_HANDLE_VALUE) return env->NewStringUTF("");
        if(GetFileTime(hFile, &creationTime, &lastAccessTime, &lastWriteTime))
        {
            if(FileTimeToLocalFileTime(&creationTime, &creationLocalTime))
            {
                if(FileTimeToSystemTime(&creationLocalTime, &creationSystemTime))
                {
                    sprintf(fileTimeString, 
                        "%04d-%02d-%02d %02d:%02d:%02d\0", 
                            creationSystemTime.wYear, 
                            creationSystemTime.wMonth, 
                            creationSystemTime.wDay, 
                            creationSystemTime.wHour, 
                            creationSystemTime.wMinute, 
                            creationSystemTime.wSecond);
                    result = env->NewStringUTF(fileTimeString);
                }
                else
                    result = env->NewStringUTF("");
            }
            else
                result = env->NewStringUTF("");
        }
        else
            result = env->NewStringUTF("");
        CloseHandle(hFile);
        return result;
    }
  • 编译工程,生成MyFileTime.dll文件
  • 在Java项目的cn.imu.jni包中添加类MyFileTime,内容为
  • package cn.imu.jni;
    
    public final class MyFileTime {
    	/**
    	 * @param args
    	 */
    	static {
            System.loadLibrary("MyFileTime");
        }
        private static native String getFileCreationTime(String fileName);
        public static String getCreationTime(String fileName) {
            return getFileCreationTime(fileName);
        }
        public static void main(String[] args) {
            System.out.println(MyFileTime.getCreationTime("c:/db.txt"));
        }
    }

    [/list]
    注意:
    • 头文件和类文件中的方法名中cn_imu_jni_MyFileTime字符串对应Java项目中的cn.imu.jni.MyFileTime,若包和类名不同,在C++代码中需要相应的更改.
    • 如果在VC++中编译时遇到缺少jni.h和jni_md.h,可以在%JAVA_HOME%\include和%JAVA_HOME%\include\win32目录中找到,copy到Microsoft Visual Studio\VC98\Include目录中或放到VC能找到的classpath即可.
    10
    0
    分享到:
    评论
    4 楼 ppjava2009 2013-10-29  
    太强了,非常好用
    3 楼 zoutuo 2009-06-07  
      
    2 楼 zhangbug 2008-05-05  
     
    1 楼 飞翔山岗 2008-05-02  
     

    相关推荐

      java获取文件创建时间

      ### Java 获取文件创建时间 在Java中,获取文件的创建时间并不像获取文件的最后修改时间那样简单直接。这是因为Java标准库(JDK)在早期版本中并没有提供直接获取文件创建时间的方法。不过,从Java 7开始,通过NIO...

      fileTimeInfo_java_统计文件创建时间和修改时间_

      标题"fileTimeInfo_java_统计文件创建时间和修改时间_"指的是一个Java程序,它用于获取指定目录下所有文件的创建时间(Creation Time)和最后修改时间(Last Modified Time)。下面将详细阐述如何在Java中实现这一...

      根据文件日期创建日期层级文件夹并迁移文件

      例如,Python的`os.path.getctime()`函数可以获取文件的创建时间,而`datetime`模块则可以用来解析和格式化日期。 2. **文件夹创建**:动态创建基于日期的层级文件夹结构是这个任务的关键部分。这涉及到递归地创建...

      PB读取已知文件创建时间、修改时间111.zip

      需要注意的是,Java并没有直接提供获取文件创建时间的方法,但通常`lastModified()`返回的时间戳可以作为创建时间的一个近似值,因为文件一旦创建,这个时间戳就被设置。 总结来说,无论是PowerBuilder还是Java,都...

      Java获取文件或文件夹信息

      在Java编程语言中,获取文件或文件夹信息是一项基本但至关重要的任务,它涉及I/O流、文件对象和相关的API。下面将详细讲解如何在Java中实现这一功能,并结合Eclipse IDE来导入和使用相关代码。 首先,我们需要了解...

      java实现文件的读取创建等操作

      按行检索一个目标文件的内容 在源文件存在的情况下 读取源文件的每一行如果读入的一行是长整形数字 long 则将数字按照# ### ###的格式输出 如果读入的一行是其他类型的数字 则将数字加一输出 如果读入的一行是yyyy ...

      如何使用Java代码获取播放文件的时长

      在Java编程环境中,获取播放文件(如音频或视频文件)的时长是一项常见的任务,尤其在多媒体处理或者媒体播放器的开发中。本教程将详细讲解如何使用Java代码来实现这一功能,支持的文件格式包括mp3、mp4、f4v、3gp、...

      Java 实现对比ftp文件和本地文件的修改时间 更新本地文件

      Java 实现对比ftp文件和本地文件的修改时间 ftp服务器文件比本地文件新时 把服务器文件下载覆盖本地文件 更新本地文件

      java获取文件信息

      在Java编程语言中,获取文件信息是一项基础但重要的任务,它涵盖了多个方面,包括文件的路径、名称、大小、创建日期、修改日期等。这里我们将深入探讨如何利用Java的内置API来实现这些功能。 首先,我们需要引入`...

      java文件夹按时间、大小等排序

      我们可以创建`File`对象来代表一个具体的文件或目录,然后通过这个对象获取文件的各种属性,如创建时间、修改时间以及文件大小等。 对于文件夹内的文件按照时间排序,我们可以利用`File`类的`lastModified()`方法,...

      java 创建EXCEL文件,并向EXCEL中写入数据

      本示例将介绍如何使用Java创建Excel文件并写入数据,主要涉及的库是`jxl`,这是一个用于读写Excel文件的开源Java库。 首先,我们需要引入`jxl`库。`jxl.jar`包含了一系列的类和接口,用于处理Excel文件的各种操作。...

      java操作文件,得到文件名,大小,时间,及修改时间

      java操作文件,得到文件名,大小,时间,及修改时间java操作文件,得到文件名,大小,时间,及修改时间java操作文件,得到文件名,大小,时间,及修改时间

      Java语句获取系统时间与实际时间相差8小时的解决办法.doc

      最近有遇到java的时间不对的事件,现象:通过java语句获得系统时间,取得的时间总是比系统时间少8个小时,获得的总是格林尼治时间(0时区的时间),检查系统时间确实是正确的,时区为GMT 8:00北京……等;...

    Global site tag (gtag.js) - Google Analytics