Как посчитать сколько в одной папке файлов .txt, и как с ними работать?

295
27 сентября 2017, 09:12

Здравствуйте, у меня такой вопрос : когда работаешь с файлами, можно ли все фалы из одной папки, к примеру : у меня есть папка "Files", в которой хранятся три текстовых документах .txt, собственно сам вопрос - могу ли я все эти 3 файла считать и получить нужную информацию, к примеру мне в этих .txt 5 строчек, из каждого .txt мне нужно получить 2 4 5 строчку, и записать их значения отдельно, это возможно? Можно ли будет определить точное количество файлов в этой папке?

Answer 1

В библиотеке есть удобный класс Files, представляющий массу полезных методов для работы с файлами.

Получить ссылки на все файлы в директории:

Files.list(PATH).collect(Collectors.toList());

Найти все ссылки на файлы .txt в директории:

Files.find(PATH, 1, (p, a) -> a.isRegularFile() && p.getFileName().toString().endsWith(".txt")).collect(Collectors.toList());

Пример, как вывести 2,4 и 5 строчки всех файлов с раширением txt в заданной директории:

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;
public class TestClass {
    public static final Path PATH = Paths.get("./testdir");
    public static void main(String[] args) throws IOException {
        System.out.println(Files.list(PATH).collect(Collectors.toList()));
        System.out.println(Files.find(PATH, 1, (p, a) -> a.isRegularFile() && p.getFileName().toString().endsWith(".txt")).collect(Collectors.toList()));
        Files.find(PATH, 1, (p, a) -> a.isRegularFile() && p.getFileName().toString().endsWith(".txt"))
                .forEach(p -> {
                    try {
                        System.out.println("File " + p.getFileName());
                        List<String> lines = Files.readAllLines(p);
                        System.out.println("2nd line: " + lines.get(1));
                        System.out.println("4th line: " + lines.get(3));
                        System.out.println("5th line: " + lines.get(4));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                });
    }
}

Результат работы:

[./testdir/2.txt, ./testdir/3.txt, ./testdir/1.txt, ./testdir/0.dxd]
[./testdir/2.txt, ./testdir/3.txt, ./testdir/1.txt]
File 2.txt
2nd line: 77777
4th line: 99999
5th line: 00000
File 3.txt
2nd line: 22222
4th line: 44444
5th line: 55555
File 1.txt
2nd line: 2222
4th line: 4444
5th line: 5555
Answer 2

Получить список файлов в директории:

File dir = new File(path); //path указывает на директорию
File[] arrFiles = dir.listFiles();
List<File> lst = Arrays.asList(arrFiles);

отсюда

READ ALSO
java.lang.NullPointerException [требует правки]

java.lang.NullPointerException [требует правки]

I know that this question is not a rare thing but nothing was helped me

465
JavaFx Разделение проекта на компоненты

JavaFx Разделение проекта на компоненты

Есть проектЗакидывает вводимые данные в таблицу

398
Помогите с авторизацией Google Oauth2

Помогите с авторизацией Google Oauth2

Есть метод авторизации через VK API, после него запускается RecyclerView!! Щас хочу сделать авторизацию через GOOGLE Oauth2, что бы когда токен одобрен, то сразу...

222
Рандомное значение из массива String

Рандомное значение из массива String

Передо мной стоит задача: написать класс "Студенты" в котором они будут выбирать себе старостуНо для начала я бы хотела наделить студентов...

366