首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DirectoryStream是空的,即使目录中有一个文件。

DirectoryStream是空的,即使目录中有一个文件。
EN

Stack Overflow用户
提问于 2018-03-29 12:43:36
回答 2查看 276关注 0票数 4

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

出于测试目的,它目前只保存一个文件。

下面是守则:

代码语言:javascript
复制
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

代码语言:javascript
复制
@Value("${logging.directory}")
private String logDir;

application.properties文件中,它看起来像

代码语言:javascript
复制
logging.directory=logs/activity
logging.file=${logging.directory}/activity.log

但是,我不认为这与此有任何关系,因为我已经尝试过用硬编码的logDir代替logs/activity

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-03 06:36:56

这个问题现在已经解决了:我只是没有将logFiles列表添加到网格中。

是什么让我认为DirectoryStream是空的,是因为调试器跳过了for-循环。我想这正是eclipse调试器处理它的方式。

我以前使用过IntelliJ,我很确定这不是他们的调试器处理它的方式。

票数 0
EN

Stack Overflow用户

发布于 2018-03-29 15:52:12

你可以找个档案访问者。无论如何,这是比较安全的,因为在访问结束时,所有资源都将被释放。另外,它给出了自定义应该如何迭代文件系统所需的每个入口点。

代码语言:javascript
复制
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;
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49556418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档