| 知乎专栏 |
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;
}