使用try-with-resources或在“finally”子句中关闭此“Stream”

我无法在这行代码/方法中应用 Sonarqube scan 建议的方法。

Sonarqube 说,“使用 try-with-resources 或在“finally”子句中关闭此“Stream”。

Files.list(voucherDirectory)
    @Override
    public String getLastModifiedFile() {
        Path voucherDirectory = Paths.get(vouchiDir);
        Optional<Path> lastFilePath = Optional.empty();
        try {
            lastFilePath = Files.list(voucherDirectory)
                    .filter(f -> !Files.isDirectory(f))
                    .max(Comparator.comparingLong(f -> f.toFile()
                            .lastModified()));
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        }

        if (lastFilePath.isPresent()) {
            return lastFilePath.get().getFileName().toString();
        }
        return "none";
    }

任何帮助真的很感激!

回答

你需要这样做:

        try (Stream<Path> list = Files.list(voucherDirectory)) {
            lastFilePath = list
                    .filter(f -> !Files.isDirectory(f))
                    .max(Comparator.comparingLong(f -> f.toFile()
                            .lastModified()));
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        }


以上是使用try-with-resources或在“finally”子句中关闭此“Stream”的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>