Как открыть и отобразить содержимое нескольких файлов в папке с несколькими папками? - PullRequest
0 голосов
/ 03 мая 2018

У меня есть папки с несколькими файлами. Такова организация.

Folder_1
  - Folder_1_File_1
  - Folder_1_File_2
  - Folder_1_File_3
  - Folder_1_File_4
  ...
Folder_2
  - Folder_2_File_1
  - Folder_2_File_2
  - Folder_2_File_3
  - Folder_2_File_4
  ...
Folder_3
  - Folder_3_File_1
  - Folder_3_File_2
  - Folder_3_File_3
  - Folder_3_File_4
  ...

Мне нужно открыть каждую папку, прочитать каждый файл, а затем выполнить некоторые вычисления для всех файлов каждой папки и отобразить результат, затем перейти к следующей папке и выполнить те же вычисления для файлов этих папок. Ниже мой код. Есть ли другой способ сделать это проще? Мой код очень медленный, а иногда даже не работает.

public void listFilesForFolder_Test(final File folder) {
        for (final File fileEntry : folder.listFiles()) {
            if (fileEntry.isDirectory()) {
                listFilesForFolder_Test(fileEntry);
            } else {

                Test_filenames.add(fileEntry.getAbsolutePath());
                Test_filename.add(fileEntry.getName());
                //  String content = FileUtils.readFileToString(file);
                 // read file and perform computations on it.

            }
        }
    } 

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Этот код предоставит вам обычные файлы (а не папки) на первый взгляд до конца указанного пути.

public class ReadRecurssivelyFromFolder {


public static void main(String[] args) {
    try {
        Files.walk(Paths.get("/home/rafik/test" ))
                .filter(Files::isRegularFile)
                .forEach(System.out::println);

    } catch (IOException ex) {
        Logger.getLogger(ReadRecurssivelyFromFolder.class.getName()).log(Level.SEVERE, null, ex);
    }
}

ВЫВОД:

enter image description here

Затем вы можете выполнить свой расчет на основе заданных путей.

0 голосов
/ 03 мая 2018

Java 8 представила API-интерфейс для посетителей Files.walkFileTree(), который намного проще освоить:

File file = new File("/base/folder");
Files.walkFileTree(file.toPath(), new SimpleFileVisitor<>() {
    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
        // do your thing here
        return FileVisitResult.CONTINUE;
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...