private List<ForwardFileItem> getForwardFiles(final Config config) {
        final List<ForwardFileConfig> forwardConfigs = NullSafe.getOrElseGet(
                config,
                Config::getProxyConfig,
                ProxyConfig::getForwardFileDestinations,
                Collections::emptyList);

        return forwardConfigs.stream()
                .flatMap(forwardFileConfig -> {
                    final Path forwardDir = pathCreator.toAppPath(forwardFileConfig.getPath());
                    final List<ForwardFileItem> forwardFileItems = new ArrayList<>();
                    try (final Stream<Path> stream = Files.walk(forwardDir)) {
                        stream.forEach(path -> {
                            if (path.getFileName().toString().endsWith(".meta")) {
                                final Path dir = path.getParent();
                                final FileGroup fileGroup = new FileGroup(dir);
                                if (!Files.exists(fileGroup.getMeta())) {
                                    LOGGER.info("Meta does not exist. dir: {}", dir);
                                }
                                final String zipFileName = fileGroup.getZip().getFileName().toString();
                                final String baseName = zipFileName.substring(0, zipFileName.indexOf('.'));
                                final List<ZipItem> zipItems = new ArrayList<>();
                                final String metaContent;
                                try {
                                    metaContent = Files.readString(fileGroup.getMeta());

                                    try (final ZipArchiveInputStream zipArchiveInputStream =
                                            new ZipArchiveInputStream(
                                                    new BufferedInputStream(
                                                            Files.newInputStream(fileGroup.getZip())))) {
                                        ZipArchiveEntry entry = zipArchiveInputStream.getNextEntry();
                                        while (entry != null) {
                                            if (!entry.isDirectory()) {
                                                final String zipEntryName = entry.getName();
                                                final FileName fileName = FileName.parse(zipEntryName);
                                                final StroomZipFileType zipEntryType =
                                                        StroomZipFileType.fromExtension(fileName.getExtension());
                                                final String zipEntryContent =
                                                        new String(zipArchiveInputStream.readAllBytes(),
                                                                StandardCharsets.UTF_8);
                                                zipItems.add(new ZipItem(
                                                        zipEntryType,
                                                        fileName.getBaseName(),
                                                        zipEntryContent));
                                            }
                                            entry = zipArchiveInputStream.getNextEntry();
                                        }
                                    }

                                } catch (Exception e) {
                                    throw new RuntimeException(e);
                                }
                                forwardFileItems.add(new ForwardFileItem(
                                        zipFileName,
                                        baseName,
                                        metaContent,
                                        zipItems));
                            }
                        });
                    } catch (final IOException e) {
                        throw new UncheckedIOException(e);
                    }

                    return forwardFileItems.stream();
                })
                .toList();
    }
Get all the files in the directories specified in {@link ForwardFileConfig}.
The dir will contain .meta and .zip pairs. Each pair is one item in the returned list.
Each .zip will contain one or more sets of .dat/.meta/.ctx/etc.
stroom-proxy/stroom-proxy-app/src/test/java/stroom/proxy/app/MockFileDestination.java