一、使用File类获取文件夹下所有文件
使用File类可以获取指定文件夹下的所有文件,代码示例如下:
public static ListgetAllFiles(File dir) { List fileList = new ArrayList<>(); if(dir.isDirectory()) { File[] subFiles = dir.listFiles(); if(subFiles != null){ for(File subFile : subFiles) { fileList.addAll(getAllFiles(subFile)); } } } else { fileList.add(dir); } return fileList; }
通过getAllFiles方法获取到的List实例,里面包含了指定文件夹下所有的文件,并可以根据需要进行进一步的处理,如遍历文件夹、获取文件名、读取文件内容等。
二、使用Files类获取文件夹下所有文件
在java.nio.file包中,Files类提供了列出指定目录下所有文件和目录的方法,代码示例如下:
public static ListgetAllFiles(Path dir) throws IOException { List fileList = new ArrayList<>(); Files.walkFileTree(dir, new SimpleFileVisitor () { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { fileList.add(file); return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) { return FileVisitResult.CONTINUE; } }); return fileList; }
通过Files类可以获取到Path实例,然后可以像操作File一样的操作Path实例,如获取文件名、读取文件内容等。
三、使用Java8的Stream获取文件夹下所有文件
在Java8之后,加入了Stream API,可以使用Stream API快速获取文件夹下所有文件,代码示例如下:
public static ListgetAllFiles(Path dir) throws IOException { try(Stream paths = Files.walk(dir)) { return paths.filter(Files::isRegularFile).collect(Collectors.toList()); } }
使用Java8的Stream获取文件夹下所有文件,代码更加简洁,但需要注意的是,由于使用了Lamda表达式和Stream,可能会对性能造成一定影响,需要根据实际情况进行选择。
四、小结
使用Java获取文件夹下所有文件主要有三种方式:使用File类、使用Files类和使用Java8的Stream。根据实际情况选择不同的方式可以更加快速和方便地获取到文件夹下所有文件。