From 207951a8074901323829d6ef8387a3dddfb56cef Mon Sep 17 00:00:00 2001 From: Juri Duval <27741935+Mulgish@users.noreply.github.com> Date: Sat, 22 Nov 2025 23:41:00 +0000 Subject: [PATCH] Switch to Java NIO for readDirInternal --- .../vertx/core/file/impl/FileSystemImpl.java | 39 ++++++++----------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/vertx-core/src/main/java/io/vertx/core/file/impl/FileSystemImpl.java b/vertx-core/src/main/java/io/vertx/core/file/impl/FileSystemImpl.java index 3b26f87cceb..c714a373f7a 100644 --- a/vertx-core/src/main/java/io/vertx/core/file/impl/FileSystemImpl.java +++ b/vertx-core/src/main/java/io/vertx/core/file/impl/FileSystemImpl.java @@ -25,10 +25,10 @@ import io.vertx.core.internal.VertxInternal; import java.io.File; -import java.io.FilenameFilter; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.file.CopyOption; +import java.nio.file.DirectoryStream; import java.nio.file.FileAlreadyExistsException; import java.nio.file.FileStore; import java.nio.file.FileVisitOption; @@ -531,7 +531,7 @@ public Void perform() { raf.setLength(len); } } catch (IOException e) { - throw new FileSystemException(getFileAccessErrorMessage("truncate", p) ,e); + throw new FileSystemException(getFileAccessErrorMessage("truncate", p), e); } return null; } @@ -840,27 +840,13 @@ public List perform() { if (!file.isDirectory()) { throw new FileSystemException("Cannot read directory " + file + ". It's not a directory"); } else { - FilenameFilter fnFilter; - if (filter != null) { - fnFilter = new FilenameFilter() { - public boolean accept(File dir, String name) { - return Pattern.matches(filter, name); - } - }; - } else { - fnFilter = null; - } - File[] files; - if (fnFilter == null) { - files = file.listFiles(); - } else { - files = file.listFiles(fnFilter); - } - List ret = new ArrayList<>(files.length); - for (File f : files) { - ret.add(f.getCanonicalPath()); + try (DirectoryStream pathStream = Files.newDirectoryStream(file.toPath(), directoryFilterInternal(filter))) { + List ret = new ArrayList<>(); + for (final Path path : pathStream) { + ret.add(path.toRealPath().toString()); + } + return ret; } - return ret; } } catch (IOException e) { throw new FileSystemException(getFolderAccessErrorMessage("read", p), e); @@ -869,6 +855,15 @@ public boolean accept(File dir, String name) { }; } + private static DirectoryStream.Filter directoryFilterInternal(String filter) { + if (filter == null) { + return entry -> true; + } else { + Pattern filePattern = Pattern.compile(filter); + return entry -> filePattern.matcher(entry.getFileName().toString()).matches(); + } + } + private BlockingAction readFileInternal(String path) { Objects.requireNonNull(path); return new BlockingAction() {