如何获取Java资源的上次修改时间?

Aar*_*lla 13 java resources last-modified

有人可以告诉我一个可靠的方法来获取Java资源的最后修改时间吗?资源可以是JAR中的文件或条目.

jar*_*bjo 17

如果您使用"资源"表示可通过Class#getResource或ClassLoader#getResource访问的内容,则可以通过URLConnection获取最后修改的时间戳:

URL url = Test.class.getResource("/org/jdom/Attribute.class");
System.out.println(new Date(url.openConnection().getLastModified()));
Run Code Online (Sandbox Code Playgroud)

请注意,如果上次修改未知,则getLastModified()将返回0,遗憾的是,无法区分读取"1970年1月1日,0:00 UTC"的实时时间戳.

  • @jarnbjo真的.但在实践中,这很少是一个问题.虽然有一个优点......这个神奇的EPOCH日期允许我在我不想提供我个人详细信息的网站上填写"1/1/1970"作为生日,安全地知道在数据库中会有公正的值"0":) (2认同)

jt.*_*jt. 5

Apache Commons VFS提供了与来自不同来源的文件交互的通用方法. FileObject.getContent()返回一个FileContent对象,该对象具有一种用于检索上次修改时间的方法.

以下是VFS网站的修改示例:

import org.apache.commons.vfs.FileSystemManager;
import org.apache.commons.vfs.FileObject;
...
FileSystemManager fsManager = VFS.getManager();
FileObject jarFile = fsManager.resolveFile( "jar:lib/aJarFile.jar" );
System.out.println( jarFile.getName().getBaseName() + " " + jarFile.getContent().getLastModifiedTime() );

// List the children of the Jar file
FileObject[] children = jarFile.getChildren();
System.out.println( "Children of " + jarFile.getName().getURI() );
for ( int i = 0; i < children.length; i++ )
{
    System.out.println( children[ i ].getName().getBaseName() + " " + children[ i ].getContent().getLastModifiedTime());
}
Run Code Online (Sandbox Code Playgroud)


cor*_*rnz 5

问题url.openConnection().getLastModified()getLastModified()在FileURLConnection上创建一个InputStream到该文件.所以你必须urlConnection.getInputStream().close()在获得最后修改日期后打电话.相比之下,JarURLConnection在调用getInputStream()时创建输入流.