java - 检索目录中的文件名时出现问题

标签 java file filesystemexception

我有以下方法来检索日志目录中 logback 生成的日志文件的名称。前 9 行确定日志记录目录:

    private List<String> getLogFileNames() {
        List<String> logFileNames = new ArrayList<>();

        ch.qos.logback.classic.Logger rootLogger = ((ch.qos.logback.classic.Logger) LOGGER).getLoggerContext().getLogger("root");

        Path logDir;

        Appender<ILoggingEvent> appender = rootLogger.getAppender("file");
        if (appender == null) {
            logDir = Paths.get(System.getProperty("user.dir"), "../logs");
        } else {
           RollingFileAppender<?> rollingFileAppender = (RollingFileAppender<?>) appender;
           logDir = Paths.get(rollingFileAppender.getFile()).getParent();
       }

        try {
            Files.list(logDir).forEach(log -> logFileNames.add(log.toFile().getName()));
        } catch (IOException e) {
            throw new IllegalStateException(e);
        }

        return logFileNames;
}

有时会抛出以下异常: java.nio.file.FileSystemException: ... : 打开文件太多

我怀疑该异常是在 Files.list(logDir).forEach() 语句中引发的。不知何故,在这段代码中,文件被打开但从未关闭。我应该如何解决这个问题?我可以使用 foreach 语句还是应该使用类似以下内容的语句:

try(Stream<Path> stream = Files.walk(logDir)) {
    // Code to extract the filename
}
catch(UncheckedIOException ex) {
    throw ex.getCause();
}

最佳答案

关于java - 检索目录中的文件名时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57047680/

相关文章:

Java:使用字符扫描器搜索文件

javascript - 使用 Angular js 上传文件 - Protractor 端到端测试

android - 在 flutter 中构建应用程序 2 次后构建失败

java - 有没有一种方法可以从两个给定的矩形中计算出较小的矩形?

java - 创建模块化Web项目(JAVA)

c - 为什么我在第二次搜索文件时收到段错误错误?

java - 从 Servlet 创建目录并将文件保存在网络位置

java - 无法对非静态方法进行静态引用

java - 想要使用外键插入辅助表,但当名称相同时不插入主表