Java NIO búsqueda de archivos en un directorio

CoveredEe:

Quiero buscar un archivo (sin saber el nombre completo) en un directorio específico utilizando Java NIO y pegote.

public static void match(String glob, String location) throws IOException {

        final PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher(
                glob);

        Files.walkFileTree(Paths.get(location), new SimpleFileVisitor<Path>() {

            @Override
            public FileVisitResult visitFile(Path path,
                    BasicFileAttributes attrs) throws IOException {
                if (pathMatcher.matches(path)) {
                    System.out.println(path);
                }
                return FileVisitResult.CONTINUE;
            }
        });
    }

Al leer algunos tutorial que hice esto. Sólo quiero volver cadena si encuentro archivo (primero) con la cadena pegote dado.

if (pathMatcher.matches(path)) {
    return path.toString();
}
Lucio:

Hay dos cosas que hay que modificar:

A " archivo de encontrar (primero) con pegote dado cuerda " que necesita para terminar recorrer el árbol si se encuentra el archivo, por lo que si se da una coincidencia. Y que necesita para almacenar la ruta coincidente como resultado. El resultado de la Files.walkFileTreemisma es el "el archivo de partida" ( JavaDoc ). Esa es una Pathque apunta al location.

public static String match(String glob, String location) throws IOException {
    StringBuilder result = new StringBuilder();
    PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher(glob);
    Files.walkFileTree(Paths.get(location), new SimpleFileVisitor<Path>() {

        @Override
        public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException {
            if (pathMatcher.matches(path)) {
                result.append(path.toString());
                return FileVisitResult.TERMINATE;
            }
            return FileVisitResult.CONTINUE;
        }
    });

    return result.toString();
}

Si no hay ninguna coincidencia, entonces el resultante Stringestá vacía.

EDIT:
Usando Files.walkpodemos llevar a cabo la búsqueda con menos código sigue utilizando una expresión basada en coincidencias de glob:

public static Optional<Path> match(String glob, String location) throws IOException {
    PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher(glob);
    return Files.walk(Paths.get(location)).filter(pathMatcher::matches).findFirst();
}

El Optionalcomo espectáculos resultado de que no puede haber ninguna coincidencia.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=184641&siteId=1
Recomendado
Clasificación