Как вывести все измененные файлы с расширением .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);
}
}
}