Skip to content

Commit f39cb4b

Browse files
BAEL-5712: Improvement in Listing files under directory (eugenp#12643)
Co-authored-by: Harpal Singh <[email protected]>
1 parent 575c2be commit f39cb4b

2 files changed

Lines changed: 55 additions & 44 deletions

File tree

core-java-modules/core-java-io-2/src/main/java/com/baeldung/listfiles/ListFiles.java

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,56 +2,49 @@
22

33
import java.io.File;
44
import java.io.IOException;
5-
import java.nio.file.DirectoryStream;
6-
import java.nio.file.FileVisitResult;
7-
import java.nio.file.Files;
8-
import java.nio.file.Path;
9-
import java.nio.file.Paths;
10-
import java.nio.file.SimpleFileVisitor;
5+
import java.nio.file.*;
116
import java.nio.file.attribute.BasicFileAttributes;
127
import java.util.HashSet;
138
import java.util.Set;
149
import java.util.stream.Collectors;
1510
import java.util.stream.Stream;
1611

1712
public class ListFiles {
18-
public static final int DEPTH = 1;
1913

2014
public Set<String> listFilesUsingJavaIO(String dir) {
2115
return Stream.of(new File(dir).listFiles())
22-
.filter(file -> !file.isDirectory())
23-
.map(File::getName)
24-
.collect(Collectors.toSet());
16+
.filter(file -> !file.isDirectory())
17+
.map(File::getName)
18+
.collect(Collectors.toSet());
2519
}
2620

2721
public Set<String> listFilesUsingFilesList(String dir) throws IOException {
2822
try (Stream<Path> stream = Files.list(Paths.get(dir))) {
2923
return stream
30-
.filter(file -> !Files.isDirectory(file))
31-
.map(Path::getFileName)
32-
.map(Path::toString)
33-
.collect(Collectors.toSet());
24+
.filter(file -> !Files.isDirectory(file))
25+
.map(Path::getFileName)
26+
.map(Path::toString)
27+
.collect(Collectors.toSet());
3428
}
3529
}
3630

3731
public Set<String> listFilesUsingFileWalk(String dir, int depth) throws IOException {
3832
try (Stream<Path> stream = Files.walk(Paths.get(dir), depth)) {
3933
return stream
40-
.filter(file -> !Files.isDirectory(file))
41-
.map(Path::getFileName)
42-
.map(Path::toString)
43-
.collect(Collectors.toSet());
34+
.filter(file -> !Files.isDirectory(file))
35+
.map(Path::getFileName)
36+
.map(Path::toString)
37+
.collect(Collectors.toSet());
4438
}
4539
}
4640

4741
public Set<String> listFilesUsingFileWalkAndVisitor(String dir) throws IOException {
4842
Set<String> fileList = new HashSet<>();
4943
Files.walkFileTree(Paths.get(dir), new SimpleFileVisitor<Path>() {
5044
@Override
51-
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
45+
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
5246
if (!Files.isDirectory(file)) {
53-
fileList.add(file.getFileName()
54-
.toString());
47+
fileList.add(file.getFileName().toString());
5548
}
5649
return FileVisitResult.CONTINUE;
5750
}
@@ -60,16 +53,14 @@ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IO
6053
}
6154

6255
public Set<String> listFilesUsingDirectoryStream(String dir) throws IOException {
63-
Set<String> fileList = new HashSet<>();
56+
Set<String> fileSet = new HashSet<>();
6457
try (DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get(dir))) {
6558
for (Path path : stream) {
6659
if (!Files.isDirectory(path)) {
67-
fileList.add(path.getFileName()
68-
.toString());
60+
fileSet.add(path.getFileName().toString());
6961
}
7062
}
7163
}
72-
return fileList;
64+
return fileSet;
7365
}
74-
7566
}
Lines changed: 38 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,71 @@
11
package com.baeldung.listfiles;
22

3-
import static org.junit.Assert.assertEquals;
3+
import org.junit.Test;
44

55
import java.io.IOException;
6+
import java.util.Collections;
67
import java.util.HashSet;
78
import java.util.Set;
89

9-
import org.junit.Test;
10-
11-
import com.baeldung.listfiles.ListFiles;
10+
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
11+
import static org.junit.Assert.assertEquals;
12+
import static org.junit.jupiter.api.Assertions.assertThrows;
1213

1314
public class ListFilesUnitTest {
1415

15-
private ListFiles listFiles = new ListFiles();
16-
private String DIRECTORY = "src/test/resources/listFilesUnitTestFolder";
17-
private static final int DEPTH = 1;
18-
private Set<String> EXPECTED_FILE_LIST = new HashSet<String>() {
16+
private static final String VALID_DIRECTORY = "src/test/resources/listFilesUnitTestFolder";
17+
private static final String INVALID_DIRECTORY = "src/test/resources/thisDirectoryDoesNotExist";
18+
private static final Set<String> EXPECTED_FILE_SET = new HashSet<String>() {
1919
{
2020
add("test.xml");
2121
add("employee.json");
2222
add("students.json");
2323
add("country.txt");
2424
}
2525
};
26+
private static final int DEPTH = 1;
27+
private final ListFiles listFiles = new ListFiles();
28+
29+
@Test
30+
public void givenAValidDirectoryWhenUsingJavaIOThenReturnSetOfFileNames() {
31+
assertThat(listFiles.listFilesUsingJavaIO(VALID_DIRECTORY))
32+
.isEqualTo(EXPECTED_FILE_SET);
33+
}
34+
35+
@Test
36+
public void givenAInvalidValidDirectoryWhenUsingJavaIOThenThrowsNullPointerExceptino() {
37+
assertThrows(NullPointerException.class,
38+
() -> listFiles.listFilesUsingJavaIO(INVALID_DIRECTORY));
39+
}
2640

2741
@Test
28-
public void givenDir_whenUsingJAVAIO_thenListAllFiles() {
29-
assertEquals(EXPECTED_FILE_LIST, listFiles.listFilesUsingJavaIO(DIRECTORY));
42+
public void givenAValidDirectoryWhenUsingFilesListThenReturnSetOfFileNames() throws IOException {
43+
assertThat(listFiles.listFilesUsingFilesList(VALID_DIRECTORY))
44+
.isEqualTo(EXPECTED_FILE_SET);
3045
}
3146

3247
@Test
33-
public void givenDir_whenUsingFilesList_thenListAllFiles() throws IOException {
34-
assertEquals(EXPECTED_FILE_LIST, listFiles.listFilesUsingFilesList(DIRECTORY));
48+
public void givenAValidDirectoryWhenUsingFilesWalkWithDepth1ThenReturnSetOfFileNames() throws IOException {
49+
assertThat(listFiles.listFilesUsingFileWalk(VALID_DIRECTORY, DEPTH))
50+
.isEqualTo(EXPECTED_FILE_SET);
3551
}
3652

3753
@Test
38-
public void givenDir_whenWalkingTree_thenListAllFiles() throws IOException {
39-
assertEquals(EXPECTED_FILE_LIST, listFiles.listFilesUsingFileWalk(DIRECTORY,DEPTH));
54+
public void givenAValidDirectoryWhenUsingFilesWalkFileTreeThenReturnSetOfFileNames() throws IOException {
55+
assertThat(listFiles.listFilesUsingFileWalkAndVisitor(VALID_DIRECTORY))
56+
.isEqualTo(EXPECTED_FILE_SET);
4057
}
4158

4259
@Test
43-
public void givenDir_whenWalkingTreeWithVisitor_thenListAllFiles() throws IOException {
44-
assertEquals(EXPECTED_FILE_LIST, listFiles.listFilesUsingFileWalkAndVisitor(DIRECTORY));
60+
public void givenAValidDirectoryWhenUsingDirectoryStreamThenReturnSetOfFileNames() throws IOException {
61+
assertThat(listFiles.listFilesUsingDirectoryStream(VALID_DIRECTORY))
62+
.isEqualTo(EXPECTED_FILE_SET);
4563
}
4664

4765
@Test
48-
public void givenDir_whenUsingDirectoryStream_thenListAllFiles() throws IOException {
49-
assertEquals(EXPECTED_FILE_LIST, listFiles.listFilesUsingDirectoryStream(DIRECTORY));
66+
public void givenAValidFileWhenUsingFilesWalkWithDepth1ThenReturnSetOfTheSameFile() throws IOException {
67+
Set<String> expectedFileSet = Collections.singleton("test.xml");
68+
String filePathString = "src/test/resources/listFilesUnitTestFolder/test.xml";
69+
assertEquals(expectedFileSet, listFiles.listFilesUsingFileWalk(filePathString, DEPTH));
5070
}
5171
}

0 commit comments

Comments
 (0)