拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何使用Java在目录中查找最后修改的文件?

如何使用Java在目录中查找最后修改的文件?

白鹭 - 2021-11-24 453 0 0

1.概述

在本快速教程中,我们将仔细研究如何在Java的特定目录中查找最后修改的文件。

首先,我们将从旧版IO和现代NIO API开始。然后,我们将看到如何使用Apache Commons IO库完成同样的事情。

2.使用java.io API

旧版java.io包提供File类来封装文件和目录路径名的抽象表示。

值得庆幸的是, File类带有一个方便的方法,称为lastModified().此方法返回用抽象路径名表示的文件的最后修改时间

现在让我们看一下如何使用java.io.File类达到预期的目的:

public static File findUsingIOApi(String sdir) {

 File dir = new File(sdir);

 if (dir.isDirectory()) {

 Optional<File> opFile = Arrays.stream(dir.listFiles(File::isFile))

 .max((f1, f2) -> Long.compare(f1.lastModified(), f2.lastModified()));



 if (opFile.isPresent()){

 return opFile.get();

 }

 }



 return null;

 }

如我们所见,我们使用Java 8 Stream API遍历文件数组。然后,我们调用max()操作以获取具有最新修改的文件.

请注意,我们使用Optional实例封装了最后修改的文件。

请记住,这种方法被认为是过时的和过时的。但是,如果我们想与Java旧式IO世界保持兼容,就可以使用它

3.使用java.nio API

NIO API的引入是文件系统管理的转折点。 Java 7中提供的新版本NIO.2带有一组增强的功能,可以更好地管理和操纵文件。

实际上,在Java中操作文件和目录时java.nio.file.Files

因此,让我们看看如何利用Files类来获取目录中最后修改的文件:

public static Path findUsingNIOApi(String sdir) throws IOException {

 Path dir = Paths.get(sdir);

 if (Files.isDirectory(dir)) {

 Optional<Path> opPath = Files.list(dir)

 .filter(p -> !Files.isDirectory(p))

 .sorted((p1, p2)-> Long.valueOf(p2.toFile().lastModified())

 .compareTo(p1.toFile().lastModified()))

 .findFirst();



 if (opPath.isPresent()){

 return opPath.get();

 }

 }



 return null;

 }

与第一个示例类似,我们依靠Steam API仅获取文件。然后,借助lambda表达式,根据上次修改时间对文件进行排序

4.使用Apache Commons IO

Apache Commons IO已将文件系统管理提高到了一个新水平。它提供了一组方便的类,文件比较器,文件过滤器等。

对我们来说幸运的是,该库提供了**LastModifiedFileComparator类,该类可用作**比较器,以按文件的最后修改时间对文件数组进行排序

首先,我们需要在pom.xml commons-io依赖项

<dependency>

 <groupId>commons-io</groupId>

 <artifactId>commons-io</artifactId>

 <version>2.8.0</version>

 </dependency>

最后,让我们展示如何使用Apache Commons IO在文件夹中查找最后修改的文件:

public static File findUsingCommonsIO(String sdir) {

 File dir = new File(sdir);

 if (dir.isDirectory()) {

 File[] dirFiles = dir.listFiles((FileFilter)FileFilterUtils.fileFileFilter());

 if (dirFiles != null && dirFiles.length > 0) {

 Arrays.sort(dirFiles, LastModifiedFileComparator.LASTMODIFIED_REVERSE);

 return dirFiles[0];

 }

 }



 return null;

 }

如上所示,我们使用**单例实例LASTMODIFIED_REVERSE以相反的顺序对文件数组进行排序**。

由于数组是反向排序的,因此最后修改的文件是数组的第一个元素。

5.结论

在本教程中,我们探索了在特定目录中查找最后修改的文件的不同方法。在此过程中,我们使用了JDK和Apache Commons IO外部库中的API。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *