#java
Мне нужно поочередно считать текст из текстовых файлов (.txt), которые находятся в папке и сохранить в array. Пример: Корневая Папка / | \ Папка А Папка Б Папка В / | \ / | \ / | \ 1.txt 2.txt 3.txt . . . n-2.txt n-1.txt n.txt Подскажите, пожалуйста, как это реализовать.
Ответы
Ответ 1
Давайте попробую ответить в меру своего понимания. (1) Обход файлов. Есть два способа — традиционный и простой, и модный и прикольный, но сложный. Традиционный способ заключается в применении рекурсии: public void processFilesFromFolder(File folder) { File[] folderEntries = folder.listFiles(); for (File entry : folderEntries) { if (entry.isDirectory()) { processFilesFromFolder(entry); continue; } // иначе вам попался файл, обрабатывайте его! } } Модный метод — применение Streams API: Files.walk(Paths.get("ваш каталог тут")) .filter(Files::isRegularFile) .map(Path::toFile) .collect(Collectors.toList()) Или если вам нужны только пути, то просто Files.walk(Paths.get("ваш каталог тут")) .filter(Files::isRegularFile) .collect(Collectors.toList()) Применяйте, если для вас слово «лямбда» означает больше, чем название греческой буквы. (2) Чтение файла в строку. Применяйте вот какую конструкцию: byte[] bytes = Files.readAllBytes(Paths.get(path)); String content = new String(bytes, encoding); При этом вы, понятно, должны знать кодировку файла (вы ведь понимаете, что текстовый файл без кодировки — нонсенс?). В качестве возможных кодировок — StandardCharsets.UTF_8 для UTF-8. Ну или может подойти Charset.defaultCharset(). (3) Ну и по поводу записи в массив есть своя тонкость. Когда вы обходите каталог, вам неизвестно, сколько файлов в нём окажется. Поэтому вы не можете выделить под них массив нужного размера. Поэтому лучше собирать данные в список (например, ArrayList), который умеет автоматически расти. И работать по сути тоже лучше со списком. Если тем не менее вам понадобится именно массив, можно сконвертировать список в массив, например, так: String[] array = list.toArray(new String[0]); Ответ 2
Всё просто. Первым делом обойдите все поддиректории и файлы в них. Итератор, например, можно взять из FileUtils (или оттуда же listFiles, смотря что нужно). Считайте каждый файл в строку. Собственно, нужные методы тоже есть в FileUtils. Добавить в массив каждую строчку, надеюсь, проблемы не составит.
Комментариев нет:
Отправить комментарий