Метод list
Метод list класса Files возвращает
поток Stream<Path>, содержащий элементы
директории, переданной в первом параметре.
В первый параметр мы передаем путь к директории
(типа Path). Второй параметр необязательный
и задает параметры обхода директории через
LinkOption (например, LinkOption.NOFOLLOW_LINKS).
Метод не рекурсивный: возвращаются только
элементы самой директории, без захода во вложенные
поддиректории. Поток нужно закрывать, поэтому
обычно его используют в try-with-resources.
Синтаксис
Files.list(dir, [options])
Пример
Давайте создадим директорию и выведем список ее элементов:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args) throws IOException
{
Path dir = Files.createTempDirectory("test");
Files.createFile(dir.resolve("a.txt"));
Files.createFile(dir.resolve("b.txt"));
Files.createFile(dir.resolve("c.txt"));
try (Stream<Path> stream = Files.list(dir)) {
stream.forEach(System.out::println);
}
}
}
Результат выполнения кода:
/tmp/test123/a.txt
/tmp/test123/b.txt
/tmp/test123/c.txt
Пример
Давайте выведем только имена файлов, а не полные пути:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args) throws IOException
{
Path dir = Files.createTempDirectory("test");
Files.createFile(dir.resolve("a.txt"));
Files.createFile(dir.resolve("b.txt"));
Files.createFile(dir.resolve("c.txt"));
try (Stream<Path> stream = Files.list(dir)) {
stream.map(Path::getFileName)
.forEach(System.out::println);
}
}
}
Результат выполнения кода:
"a.txt"
"b.txt"
"c.txt"
Пример
Давайте посчитаем количество элементов в директории:
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.stream.Stream;
public class Main
{
public static void main(String[] args) throws IOException
{
Path dir = Files.createTempDirectory("test");
Files.createFile(dir.resolve("a.txt"));
Files.createFile(dir.resolve("b.txt"));
Files.createFile(dir.resolve("c.txt"));
try (Stream<Path> stream = Files.list(dir)) {
long res = stream.count();
System.out.println(res);
}
}
}
Результат выполнения кода:
3
Смотрите также
-
класс
Files,
который содержит методы для работы с файлами -
метод
walk,
который рекурсивно обходит директорию -
метод
find,
который ищет файлы по условию -
метод
isDirectory,
который проверяет, является ли путь директорией