读取jar包中resource下的文件getResource in jar file

getResource file in jar,读取jar包中resource文件列表有三种方式,每种应用场景都有各自的限制,如:Resources.getResource(getClass())。

方案1/Solution 1

--java-* 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);

对于需要明确知道文件列表的需求,可以在打包时,通过打包脚本将文件列表写到一个指定的文件中,然后,读取这个指定的文件,依赖这个文件对获取文件。

--xml--<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中的文件,这种方式的限制太多,并且适用性太窄,有兴趣可以试试。