gpt4 book ai didi

java - DirectoryStream 为空,即使目录中有文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:47:48 25 4
gpt4 key购买 nike

我对 DirectoryStream 有疑问.我目前尝试为我的应用程序构建一个 LogViewer,它应该遍历目录中的所有文件并将它们添加到网格中。

This is the directory.

出于测试目的,它目前只包含一个文件。

代码如下:

final Path logDirPath = Paths.get(this.logDir);
if (logDirPath.toFile().isDirectory()) {
try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(logDirPath, "*.log")) {
for (Path p : directoryStream) {
logFiles.add(new LogFile(p.toFile()));
}
} catch (final IOException e) {
this.logger.error("Could not read files in directory {}", this.logDir, e);
}
}

logDir 的值为 logs/activity

我尝试调试它,但它只是跳过了 logFiles.add(new LogFile(p.toFile())); 行,所以看起来目录必须是空的,但是我知道不是。

那么,有人能发现问题吗?任何帮助将不胜感激。

编辑

我通过

获取 logDir
@Value("${logging.directory}")
private String logDir;

来自 application.properties 文件,看起来像

logging.directory=logs/activity
logging.file=${logging.directory}/activity.log

但是,我认为这与此无关,因为我已经尝试通过简单地硬编码 logs/activity 来替换 logDir

最佳答案

您可以使用文件访问器。无论如何,这更安全,因为保证在访问结束时释放所有资源。此外,它还提供了自定义应该如何迭代文件系统所需的每个入口点。

Files.walkFileTree(Paths.get("logs/activity"), new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (file.endsWith(".log")) {
// Handle log file.
}

return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
// Handle exception
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
// CONTINUE if you want recursive behaviour, SKIP_SUBTREE if not.
return FileVisitResult.CONTINUE;
}

@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});

关于java - DirectoryStream 为空,即使目录中有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49556418/

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