知乎专栏 |
package cn.netkiller.path; import lombok.Data; import java.io.File; import java.io.IOException; @Data public class FileDirectory { public static void main(String[] args) throws IOException { // String path = "D:\\TMP";/ //要遍历的路径 windows String path = "/etc"; //要遍历的路径 linux/mac File file = new File(path); //获取其file对象 listFiles(file); } private static void listFiles(File file) { File[] files = file.listFiles(); if (files == null) return; for (File f : files) { if (f.isDirectory()) //若是目录,则递归打印该目录下的文件 listFiles(f); if (f.isFile()) //若是文件,直接打印 System.out.println(f); } } }
public static Set<String> listFilesStream(String dir) { return Stream.of(Objects.requireNonNull(new File(dir).listFiles())) .filter(file -> file.isFile()) .map(File::toString) .collect(Collectors.toSet()); }
package cn.netkiller.test; import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashSet; import java.util.Set; public class FileDirectory { public static void main(String[] args) throws IOException { String path = "/etc"; //要遍历的路径 listDirectoryStream(path).forEach(file -> { System.out.println(file); }); } public static Set<String> listDirectoryStream(String dir) throws IOException { Set<String> fileSet = new HashSet<>(); try (DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get(dir))) { for (Path path : stream) { if (!Files.isDirectory(path)) { fileSet.add(path.toString()); } } } return fileSet; } }
递归遍历目录
public static Set<String> listDirectoryStream(String dir) { Set<String> fileSet = new HashSet<>(); try (DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get(dir))) { for (Path path : stream) { if (!Files.isDirectory(path)) { fileSet.add(path.toString()); } else { listDirectoryStream(path.toString()).forEach(file -> { fileSet.add(file); }); } } } catch (Exception e) { e.printStackTrace(); } return fileSet; }
package cn.netkiller.test; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; public class FileDirectory { public static void main(String[] args) throws IOException { String path = "/etc"; //要遍历的路径 filesList(path).forEach(file -> { System.out.println(file); }); } public static Set<String> filesList(String dir) throws IOException { try (Stream<Path> stream = Files.list(Paths.get(dir))) { return stream .filter(file -> !Files.isDirectory(file)) // .map(Path::getFileName) .map(Path::toString) .collect(Collectors.toSet()); } } }
package cn.netkiller.test; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; public class FileDirectory { public static void main(String[] args) throws IOException { String path = "/tmp/test"; //要遍历的路径 filesWalk(path).forEach(file -> { System.out.println(file); }); } public static Set<String> filesWalk(String dir) { try (Stream<Path> stream = Files.walk(Paths.get(dir))) { // stream.toList().forEach(path -> { // System.out.println(path.toString()); // }); // return stream.sorted().map(Path::toString).collect(Collectors.toSet()); return stream.sorted().filter(file -> !Files.isDirectory(file)) // .map(Path::getFileName) .map(Path::toString) .collect(Collectors.toSet()); } catch (IOException e) { e.printStackTrace(); } return new HashSet<>(); } }
指定目录深度 5 层
Stream<Path> stream = Files.walk(Paths.get(dir), 5)
public Set<String> listFilesWalk(String dir, int depth) throws IOException { try (Stream<Path> stream = Files.walk(Paths.get(dir), depth)) { return stream .filter(file -> !Files.isDirectory(file)) .map(Path::getFileName) .map(Path::toString) .collect(Collectors.toSet()); } }
public Set<String> listFilesWalkAndVisitor(String dir) throws IOException { Set<String> fileList = new HashSet<>(); Files.walkFileTree(Paths.get(dir), new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { if (!Files.isDirectory(file)) { fileList.add(file.getFileName().toString()); } return FileVisitResult.CONTINUE; } }); return fileList; }