如何从 java 资源文件夹中的文件夹中获取所有文件的列表

how to get list of all files from folder inside java resources folder

我在 'protocol' 文件夹 中有 多个文件。我想获取 'protocol' 文件夹内的文件列表,该文件夹位于 java 资源文件夹 (src/main/resources/protocol/...).

所以当我尝试访问任何一个文件时,它在 eclipse IDE(使用 main 方法)和 wildfly 部署中都能正常工作。它在文件中给出行。

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

但是当尝试读取文件夹时,它在 eclipse IDE(获得文件名列表)中工作正常,但在 wildfly 部署中不起作用,它给出一个空白列表 [].

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

我正在使用 jboss wildfly 服务器 version:9.0.1 和 java 版本“1.8.0_161”.

感谢您的帮助。

类似于:

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());

说明Path是File的更细化概括。 它使用 jar:file: 协议(协议,如 http:)。

找到了获取文件夹内所有文件的解决方案。

如果我们尝试通过 getResource() 方法访问文件夹,它将 return 根据 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;
    }