jar包读取resource目录

jar包中读取resource文件列表三种方式。

方案1/Solution 1

this.getClass().getResource("").openStream();

String resources ="view/";

this.getClass().getResource("/" + resources);

path == src/main/resources/views

方案2/Solution 2

this.getClass().getResourceAsStream(path);

/demo/src/main/java

/demo/src/main/resources

限制在于没有提供遍历文件列表的功能,只能读取单个文件,这种限制对于被动获取文件是没有问题的,如,给定一个逻辑文件名,然后,去加载成物理文件,如:mvc中的视图名与视图文件的转换:

String view = "/index",prefix="view/",suffix=".html";

String path = "/" + prefix + view + suffix;

this. getClass().getResourceAsStream(path);

对明确知道文件列表的需求,在打包时将文件列表写入一个指定的文件中。

<plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <configuration>
                            <target>
                                <fileset id="my-fileset" dir="src/main/resources" >
                                    <include name="views/*/*.html"/>
                                </fileset>
                                <pathconvert targetos="unix" pathsep=","
                                    property="file-item" refid="my-fileset">
                                    <map from="${basedir}\src\main\resources" to="" />
                                </pathconvert>
                                <echo file="${basedir}\target\viewList">${file-item}</echo>
                                <echo file="src/main/resources/viewList">${file-item}</echo>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

方案3/Solution 3

通过ZipFile读取jar中的文件,限制太多且适用性太窄。