如何从外部jar文件获取资源列表?

yx2lnoni  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(353)

在我的android项目中,我在'/apps/libs'文件夹下添加了一个名为myexternalapp.jar的jar文件。
myexternalapp.jar以以下方式提供资源

/someDir
 /jsonfile1.json
 /jsonfile2.json

fileresourcesutils.java是myexternalapp.jar的一部分,读取这些json文件如下:

public List<Path> getPathsFromResourceJAR(String folder){
   // get path of the current running JAR
    String jarPath = getClass().getProtectionDomain()
            .getCodeSource()
            .getLocation()
            .toURI()
            .getPath();
    System.out.println("JAR Path :" + jarPath);

    // file walks JAR
    URI uri = URI.create("jar:file:" + jarPath);
    try (FileSystem fs = FileSystems.newFileSystem(uri, Collections.emptyMap())) {
        result = Files.walk(fs.getPath(folder))
                .filter(Files::isRegularFile)
                .collect(Collectors.toList());
    }

    return result;
 }

但上面代码的问题是,当我从android应用程序调用函数时,如下所示:

`public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    FileResourcesUtils util = new FileResourcesUtils();
    util.getPathsFromResourceJAR("someDir");
   }
 }`

然后我得到这个空点错误,因为根据这篇文章,protectiondomain是不允许的:
java.lang.nullpointerexception:尝试对空对象引用调用虚拟方法“java.security.codesource java.security.protectiondomain.getcodesource()”
我把代码改成如下:

public List<Path> getPathsFromResourceJAR(String folder){
     URL url =   FileResourcesUtils.class.getResource(FileResourcesUtils.class.getSimpleName() + ".class");
 System.out.println("URL path : " + url.getPath());
 // other code   .......
}

但是这里我也得到了空指针错误,因为url对象是空的
当我把上面的代码改为

URL url =FileResourcesUtils.class.getClassLoader().getResource("someDir/jsonfile1.json");

我得到的路径是这样的: jar:file/data.com.testing.<some hash code>!/someDir/jsonfile1.json 但它没有给出jar的位置。
请建议如何获取外部jar下的资源列表。这在非android java应用程序中运行良好。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题