gpt4 book ai didi

java - 递归列出最后修改的文件 NIO

转载 作者:行者123 更新时间:2023-11-30 08:17:18 25 4
gpt4 key购买 nike

我正在使用下面的代码来列出根文件夹中的所有文件。 (我的根目录包含许多文件夹和子文件夹。)

  Path startPath = Paths.get("D:\\users\\Desktop\\myRootDir");
Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs) {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
System.out.println(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException e) {
return FileVisitResult.CONTINUE;
}
});

有没有办法只列出最后修改的文件,有没有办法在 java NIO 中搜索文件的内容?

注意:上次修改的文件是指最近在一个文件夹中创建的文件。

更新

           @Override
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs) {
System.out.println(dir.getFileName());
if(dir.getFileName().equals("processes"))
return FileVisitResult.SKIP_SUBTREE;
else
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException e) {
FileInfo mostRecentFile = mostRecentFilesByDir.remove(dir);
if (mostRecentFile != null) {
// System.out.println(mostRecentFile.path);
}

return FileVisitResult.CONTINUE;
}

上面的代码仍然返回进程目录中的文件,我在这里做错了吗?

最佳答案

如果我正确理解您的问题,您需要在每个目录中包含特定文本的最近创建的文件。您可以通过在映射中跟踪每个目录的最新文件,并将每个文件传递给扫描器来完成此操作:

String textToSearchFor = "important";
final Pattern searchPattern =
Pattern.compile(Pattern.quote(textToSearchFor));

Path startPath = Paths.get("D:\\users\\Desktop\\myRootDir");
Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {

class FileInfo {
final FileTime time;
final Path path;

FileInfo(Path path, FileTime time) {
this.path = path;
this.time = time;
}
}

private final Map<Path, FileInfo> mostRecentFilesByDir =
new HashMap<>();

@Override
public FileVisitResult postVisitDirectory(Path dir, IOException e) {

FileInfo mostRecentFile = mostRecentFilesByDir.remove(dir);
if (mostRecentFile != null) {
System.out.println(mostRecentFile.path);
}

return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs)
throws IOException {

try (Scanner scanner = new Scanner(file)) {
if (scanner.findWithinHorizon(searchPattern, 0) == null) {
// Text not found.
return FileVisitResult.CONTINUE;
}
}

FileTime time = attrs.creationTime();
Path dir = file.getParent();
FileInfo info = mostRecentFilesByDir.get(dir);
if (info == null || time.compareTo(info.time) > 0) {
mostRecentFilesByDir.put(dir, new FileInfo(file, time));
}

return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFileFailed(Path file, IOException e) {
return FileVisitResult.CONTINUE;
}
});

关于java - 递归列出最后修改的文件 NIO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27934974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com