Как вывести все измененные файлы с расширением .txt директории в консоль?

Считывая текст с файлов, я вывожу измененный текст - в котором нету слов, состоящие от 3 до 5 букв, я реализовал это только для одного файла в директории, подскажите пожалуйста новичку, как считать все файлы из определенной директории и вывести перезаписанный текст в консоль?

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;


public class Main {
    public static void main(String[] args) {
        String filePath = "C:\\Users\\User\\Desktop\\Java\\src\\Text.txt";
        try (BufferedReader reader = Files.newBufferedReader(Paths.get(filePath))) {
            String value = reader.readLine();
            System.out.println(value);
            String[] splitValue = value.split(" ");
            StringBuilder sb = new StringBuilder();

            for (String s : splitValue) {
                if (!(s.length() % 5 == 0) && !(s.length() % 4 == 0) && !(s.length() % 3 == 0)){
                    sb.append(s).append(" ");
                }
            }
            String outText = sb.toString().trim();
            System.out.print("" +outText+" "+"\n\n");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


Ответы (1 шт):

Автор решения: Дмитрий

Ваш код некорректный, к тому же излишне сложный. Подобные задачи лучше решать с использованием функционального подхода:

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class Main {

    public static void main(String[] args) {
        
        String directoryName = "";
        String fileExtention = ".txt";
        
        File directory = new File(directoryName);
        if (!directory.exists()) throw new RuntimeException("Directory with name '" + directoryName + "' not exist");
        Stream.of(directory.listFiles())
                .filter(file -> !file.isDirectory())
                .map(file -> file.getName())
                .filter(fileName -> fileName.endsWith(fileExtention))
                .map(fileName -> read(fileName))                
                .forEach(System.out::println);
    }

    public static String read(String filePath) {
        System.out.println(filePath);
        try (Stream<String> lineStream = Files.lines(Paths.get(filePath))) {
            return lineStream
                    .map(line -> Arrays.stream(line.split(" "))
                            .filter(word -> word.length() < 3 || word.length() > 5)
                            .collect(Collectors.joining(" ")))
                    .collect(Collectors.joining("\n"));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    
}
→ Ссылка