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 评论