不知道是否有什么好办法,我用dir命令获取时无法取到秒位,分钟后面就没有了. 

解决方案 »

  1.   

    用dir是取不到秒的,用下列的办法吧
    package cn.numen.JavaStudy;import java.io.File;
    import java.io.IOException;
    import java.util.Calendar;public class Test { /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
    File file =new File("D:\\test.txt");
    Long time =file.lastModified();
    Calendar cd = Calendar.getInstance();
    cd.setTimeInMillis(time);
    System.out.println(cd.getTime());
    //TODO 下面的就自己写了吧
    }}
      

  2.   

    用java.io.File的lastModified()方法可以取得(1970 年 1 月 1 日,00:00:00 GMT)
    的信息,应该是LZ要的吧
      

  3.   

    嘿嘿,楼上的和我想法一样,不过我想问:lastModified()和创建时间是同一个值吗?(提示:dir /TW 按最后修改顺序排序但显示的是创建时间)
      

  4.   

    嗯,你提醒了我,看来我的那个办法是不对的,如果修改后就得到的是修改时间了。看来只能采用jni了。
      

  5.   

    不是楼主要的,看文件的属性,有一个创建时间,和一个修改时间,ls的取的是修改时间。
    LZ已经知道怎么用windows的命令取得创建时间,他要的是取到秒。
      

  6.   

    TO numen_wlm:
    lastModified()是最后一次修改时间,跟创建时间并不是同一个值啊
    TO yinfei456:
    取系统当前时间会有一定的误差,我也曾经想过,但感觉这不是一个好办法 :)
      

  7.   

    TO jiazhengjing:
    完全是我的意思 :)
      

  8.   

    我也继续。。 我对JNI不太清楚。。 来学习
      

  9.   

    多谢关注,有谁用jni实现过,介绍一下吧
      

  10.   

    baidu了一圈,没找到方法,想用ScriptEngine ,结果不支持ActiveXObject....
    等待高人
      

  11.   

    谁用jni实现过,或者有其他好办法,help!
      

  12.   

    jni C/C++ 头文件:MyFileTime.h
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #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_MyFileTime_getFileCreationTime
      (JNIEnv *, jclass, jstring);#ifdef __cplusplus
    }
    #endif
    #endif
      

  13.   

    源文件:MyFileTime.c
    #include <windows.h>
    #include "MyFileTime.h"JNIEXPORT jstring JNICALL Java_MyFileTime_getFileCreationTime(JNIEnv *env, jclass 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, 
    "%d.%d.%d %d:%d:%d.%d\0", 
    creationSystemTime.wYear, 
    creationSystemTime.wMonth, 
    creationSystemTime.wDay, 
    creationSystemTime.wHour, 
    creationSystemTime.wMinute, 
    creationSystemTime.wSecond, 
    creationSystemTime.wMilliseconds);
    result = env->NewStringUTF(fileTimeString);
    }
    else
    result = env->NewStringUTF("");
    }
    else
    result = env->NewStringUTF("");
    }
    else
    result = env->NewStringUTF("");
    CloseHandle(hFile);
    return result;
    }
      

  14.   

    精确到毫秒:
    public final class MyFileTime {
    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("D:/modeldesign/MyStuff/MyFileTime.dll"));
    }
    }
      

  15.   

    TO powerlee2008:
    多谢高人的回复,我不会将c代码编译成java的loadLibrary可以调用的库,望指教.
      

  16.   

    参考下这个,就知道怎么生成dll了
    http://blog.csdn.net/sunyujia/archive/2007/10/19/1833621.aspx
      

  17.   

    答:若不会,咱们就弄个简单的。你总会把C程序编译成EXE文件吧。以下程序是在powerlee2008上简化而成的。#include "stdio.h"
    #include "windows.h"
    void main(int argc,char** argv){    HFILE hFile;
    OFSTRUCT lp;
        FILETIME creationTime;
        FILETIME lastAccessTime;
        FILETIME lastWriteTime;
        FILETIME creationLocalTime;
        SYSTEMTIME creationSystemTime;
        
       
        hFile = OpenFile(argv[1],&lp, OF_READ);
        if(hFile == HFILE_ERROR) 
    {
    printf("");
    return;
    }
        if(GetFileTime((HANDLE)hFile, &creationTime, &lastAccessTime, &lastWriteTime))
        {
            if(FileTimeToLocalFileTime(&creationTime, &creationLocalTime))
            {
                if(FileTimeToSystemTime(&creationLocalTime, &creationSystemTime))
                {
                    printf("%d.%d.%d-%d:%d:%d.%d\0", 
                            creationSystemTime.wYear, 
                            creationSystemTime.wMonth, 
                            creationSystemTime.wDay, 
                            creationSystemTime.wHour, 
                            creationSystemTime.wMinute, 
                            creationSystemTime.wSecond, 
                            creationSystemTime.wMilliseconds);
                   return ;
                }
    }
    }
    printf("");
        return ;
    }然后,Process p = Runtime.getRuntime().exec("cmd /c c:\\GetFileTime1.exe c:\\t1.txt");中再读取吧。否则怎办呢?
    为方便你处理,将结果输出改为:2008.4.24-20:11:3.480 格式。dir命令显示的最后修改的时间,而不是创建文件的时间。以上仅供你参考。
      

  18.   

    我已经成功生成了dll文件,但是运行到return getFileCreationTime(fileName);时报错如下
    Exception in thread "main" java.lang.UnsatisfiedLinkError: cn.imu.general.MyFileTime.getFileCreationTime(Ljava/lang/String;)Ljava/lang/String;
    at cn.imu.general.MyFileTime.getFileCreationTime(Native Method)
    at cn.imu.general.MyFileTime.getCreationTime(MyFileTime.java:19)
    at cn.imu.general.MyFileTime.main(MyFileTime.java:23)我应该可以确认,java程序已经调用了dll文件我是按照powerlee2008 的调用方法
    public final class MyFileTime {
        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("D:/modeldesign/MyStuff/MyFileTime.dll"));
        }
    }感谢sunyujia jiangnaisong :)
      

  19.   

    针对 UnsatisfiedLinkError把dll放到system32下面或程序可以找到的地方
      

  20.   

    OK了 多谢各位
    能否在这里再讨论下linux下的方法.解决了我再开一贴感谢
      

  21.   

    导致这个的原因是MyFileTime 类的包路径跟dll中的声明没有对应
      

  22.   

    在Linux中,没有文件创建时间的概念。只有文件的访问时间、修改时间、状态改变时间。也就是说不能知道文件的创建时间。