How about BiConsumer<Path, IOException>, unless the Path is easily accessible 
otherwise?

On Jul 2, 2015, at 6:56 AM, Peter Levart <peter.lev...@gmail.com> wrote:

> Hi,
> 
> Recently I wanted to use Files.walk method returning a Stream<Path> to scan a 
> directory of files. I quickly learned that it is of limited use. For example, 
> the following code:
> 
>        long pngFilesCount = Files.walk(Paths.get("/usr"))
>                .filter(path -> path.toString().endsWith(".png"))
>                .count();
> 
> Throws exception on my computer:
> 
> Exception in thread "main" java.io.UncheckedIOException: 
> java.nio.file.AccessDeniedException: /usr/share/polkit-1/rules.d
> 
> This is a consequence of the fact that some files and/or directories in the 
> tree being scanned are not accessible to my user account on the computer. If 
> I wanted to skip those files/directories I would be forced to use different 
> API (Files.walkFileTree using FileVisitor which can handle exceptions too).
> 
> I propose the addition of overloads to Files.walk and Files.find that take an 
> additional parameter of type Consumer<IOException> to be responsible for 
> handling IOExceptions that are thrown while walking the file tree:
> 
> http://cr.openjdk.java.net/~plevart/jdk9-dev/Files.walkIOException/webrev.01/
> 
> Ignoring AccessDeniedException(s) in above code can therefore be coded as:
> 
>        long pngFilesCount = Files.walk(Paths.get("/usr"), Integer.MAX_VALUE,
>                ioe -> {
>                    if (!(ioe instanceof AccessDeniedException)) {
>                        throw new UncheckedIOException(ioe);
>                    }
>                })
>                .filter(path -> path.toString().endsWith(".png"))
>                .count();
> 
> What do you think?
> 
> Regards, Peter
> 

Reply via email to