Класс DirectoryStream
Класс DirectoryStream из пакета java.nio.file предназначен для перебора элементов директории. Он реализует интерфейс Iterable, поэтому его можно использовать в цикле for-each. Объект DirectoryStream создается с помощью статического метода newDirectoryStream класса Files. В первый параметр мы передаем путь к директории (объект Path), во второй - фильтр в виде лямбда-выражения или объекта DirectoryStream.Filter. Класс DirectoryStream реализует интерфейс AutoCloseable, поэтому его следует закрывать после использования, например, через try-with-resources.
Синтаксис
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, filter))
{
for (Path entry : stream)
{
// ...
}
}
Пример
Давайте переберем все элементы текущей директории и выведем их имена:
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main
{
public static void main(String[] args) throws IOException
{
Path dir = Paths.get(".");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir))
{
for (Path entry : stream)
{
System.out.println(entry.getFileName());
}
}
}
}
Результат выполнения кода:
"Main.java"
"test.txt"
"data"
Пример
Давайте отфильтруем только файлы с расширением .txt, используя лямбда-выражение:
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main
{
public static void main(String[] args) throws IOException
{
Path dir = Paths.get(".");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.txt"))
{
for (Path entry : stream)
{
System.out.println(entry.getFileName());
}
}
}
}
Результат выполнения кода:
"test.txt"
"notes.txt"
Пример
Давайте выведем только поддиректории, используя фильтр через метод isDirectory:
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main
{
public static void main(String[] args) throws IOException
{
Path dir = Paths.get(".");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, Files::isDirectory))
{
for (Path entry : stream)
{
System.out.println(entry.getFileName());
}
}
}
}
Результат выполнения кода:
"data"
"src"
Смотрите также
-
класс
InputStream,
который читает данные из потока -
класс
FileInputStream,
который читает данные из файла -
класс
FileReader,
который читает символы из файла -
класс
StandardOpenOption,
который задает режим открытия файла