1. 모든 파일, 폴더(디렉토리) 탐색
- Files.walk() 에 Path 객체를 전달하면 그 경로의 하위 폴더 및 파일들을 탐색할 수 있음
- 리턴된 Stream을 통해서 List를 생성할 수 있음
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class FilesWalkExample {
public static void main(String[] args) throws IOException {
Path dirPath = Paths.get("/home/js/tests");
List<Path> result;
Stream<Path> walk = Files.walk(dirPath);
result = walk.collect(Collectors.toList());
for (Path path : result) {
System.out.println(path);
}
}
}
2. 파일만 탐색
- Stream에서 filter(Files::isRegularFile)처럼 필터 조건을 설정하면 List에는 파일에 대한 Path 객체만 추가됨
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class FilesWalkExample2 {
public static void main(String[] args) throws IOException {
Path dirPath = Paths.get("/home/js/tests");
List<Path> result;
Stream<Path> walk = Files.walk(dirPath);
result = walk.filter(Files::isRegularFile)
.collect(Collectors.toList());
for (Path path : result) {
System.out.println(path);
}
}
}
3. 폴더(디렉토리)만 탐색
- Stream에서 filter(Files::isDirectory)처럼 필터 조건을 설정하면 List에는 폴더에 대한 Path 객체만 추가됨
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class FilesWalkExample3 {
public static void main(String[] args) throws IOException {
Path dirPath = Paths.get("/home/js/tests");
List<Path> result;
Stream<Path> walk = Files.walk(dirPath);
result = walk.filter(Files::isDirectory)
.collect(Collectors.toList());
for (Path path : result) {
System.out.println(path);
}
}
}
4. 파일 이름으로 파일 찾기
- filter()에서 파일이름을 비교하여 원하는 파일만 찾을 수 있음
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class FilesWalkExample4 {
public static void main(String[] args) throws IOException {
Path dirPath = Paths.get("/home/js/tests");
String fileName = "ccc.png";
List<Path> result;
Stream<Path> walk = Files.walk(dirPath);
result = walk.filter(Files::isRegularFile)
.filter(p -> p.getFileName().toString().equalsIgnoreCase(fileName))
.collect(Collectors.toList());
for (Path path : result) {
System.out.println(path);
}
}
}
- 지정된 경로의 바로 하위 경로만 탐색(depth =1)
- walk()의 두번째 인자로 depth = 1을 전달하면, 지정된 경로의 바로 하위 경로만 탐색함
Stream<Path> walk = Files.walk(dirPath, 1);