首页 > 编程知识 正文

读取jar包中的配置文件(java getresources方法_java – JAR索引和getResources)

时间:2023-05-03 08:14:50 阅读:124095 作者:2313

import java.io.*;

import java.net.*;

import java.util.*;

公共类try it {

publicstaticvoidmain (字符串[ ] args ) throws Exception { )。

URL[] urls={

(newfile(a.jar ) ).getAbsoluteFile ) ).toURI ).toURL )、

(newfile(b.jar ) ).getAbsoluteFile ) ).toURI ).toURL ) )。

(;

urlclassloadercl=URL class loader.new instance (URLs;

String[] res={ 'foo '、' foo/'、' foo/arb '、' foo/bar '、' foo/cab' };

for(stringr:RES ) {

system.out.println(''r'': );

for (urlu : collections.list (cl.get resources (r ) )

system.out.println(''u;

}

}

}

准备此程序中提到的JAR文件。

mkdir a/foo b/foo

toucha/foo/Arba/foo/barb/foo/barb/foo/cab

echo 'Class-Path: b.jar' mf

jar cfm a.jar mf -C a foo

jar cf b.jar -C b foo

运行java TryIt时,将获得与以下示例类似的输出:

' foo':

jar:file:…/a.jar! /foo

jar:file:…/b.jar! /foo

' foo/':

jar:file:…/a.jar! /foo/

jar:file:…/b.jar! /foo/

' foo/arb':

jar:file:…/a.jar! /foo/arb

' foo/bar':

jar:file:…/a.jar! /foo/bar

jar:file:…/b.jar! /foo/bar

' foo/cab':

jar:file:…/b.jar! /foo/cab

但是,如果运行jar -i a.jar创建索引,则会打印上面的命令。

' foo':

jar:file:…/a.jar! /foo

' foo/':

jar:file:…/a.jar! /foo/

' foo/arb':

jar:file:…/a.jar! /foo/arb

' foo/bar':

jar:file:…/a.jar! /foo/bar

' foo/cab':

jar:file:…/b.jar! /foo/cab

索引本身如下:

JarIndex-Version: 1.0

a.jar

福奥

b.jar

福奥

getResources合同是否意味着返回与指定名称匹配的所有可用资源?

findsalltheresourceswiththegivenname。

normallyonepackagenameismappedtoonejarfile,butifaparticularpackagespansmorethanonejarfile,themappedvalueofthispackagewewile

有规范表明我观察到的确实是正确的(或至少是许可的)行为吗?

虽然有索引,但是有没有解决方案可以获取所有命名资源?

最好的答案似乎是错误的

我向甲骨文报告了那个。 那是现在在他们的错误数据库中

错误8150615。

我在OpenJDK源代码中进行了一些挖掘,在那里发现了这一行为的共鸣。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。