как получить список всех файлов из папки внутри папки ресурсов Java

У меня есть несколько файлов в папке "протокол". Я хочу получить список файлов внутри папки «протокол», которая находится внутри папки ресурсов Java (src / main / resources / protocol / ...).

поэтому, когда я пытался получить доступ к любому файлу, он отлично работает в среде Eclipse IDE (с использованием основного метода), а также при развертывании wildfly. он выдает строки внутри файлов.

List<String> files = IOUtils.readLines(classLoader.getResourceAsStream("protocol/protocol1.csv"));

но при попытке прочитать папку он отлично работает в eclipse IDE (получил список имен файлов), но не работает при развертывании wildfly, он дает пустой список [].

List<String> files = IOUtils.readLines(classLoader.getResourceAsStream("protocol"));

Я использую версию сервера jboss wildfly: 9.0.1 и версию java «1.8.0_161».

Спасибо за любую помощь.


person kinjal raval    schedule 05.12.2019    source источник
comment
Конечно. Нет такой вещи, как перечисление файлов в папке, когда ваше приложение упаковано как файл e, g, .ear. Таким образом, вы можете вести свой список файлов, например. в текстовом файле.   -  person Gyro Gearless    schedule 05.12.2019


Ответы (2)


Нашел решение получить все файлы внутри папки.

если мы попытаемся получить доступ к папке с помощью метода getResource (), он вернется с точки зрения протокола vfs, и нам нужно преобразовать это в

public List<String> loadFiles() throws IOException, Exception {
        List<String> fileNames = new ArrayList<>();
        URL resourceUrl = getClass().getResource("/protocol");
        VirtualJarInputStream jarInputStream = (VirtualJarInputStream) resourceUrl.openStream();
        JarEntry jarEntry = null;
        while ((next = jarInputStream.getNextJarEntry()) != null) {
            fileNames.add(jarEntry.getName());
        }
        return fileNames;
    }

person kinjal raval    schedule 17.12.2019

Что-то вроде:

URL url = classLoader.getResourceAsStream("protocol");
Path dirPath = Paths.get(url.toURI());
Stream<Path> paths = Files.list(dirPath);
List<String> names = paths
        .map(p -> p.getFileName().toString())
        .collect(Collectors.toList());

Это показывает, что путь - это более тонкое обобщение файла. Он использует протокол jar:file: (протоколы, например http :).

person Joop Eggen    schedule 05.12.2019
comment
спасибо попробовал ваше решение, при попытке получить список (Files.list (dirPath)) он выдает ошибку как 'java.nio.file.FileSystemNotFoundException: Provider vfs not installed' любая идея? URI, который я получаю, похож на vfs: /content/project_Name.war/WEB-INF/classes/protocol/ - person kinjal raval; 05.12.2019
comment
В качестве альтернативы прочтите все байты из getResourceAsStream. Иногда это формирует список записей. Конечно, представление файловой системы может быть реализовано в vfs. Я не знаю. - person Joop Eggen; 05.12.2019