java 文件夹 jar_java – 如何访问jar文件中的文件夹内容?

我需要看一下特定包中的文件名.目前,我正在做以下事情:

ClassLoader loader = Thread.currentThread().getContextClassLoader();

URL packageUrl = loader.getResource(getPackage().replace('.', '/'));

File packageDir = new File(packageUrl.getFile());

// Work with the files inside the directory

这实际上在Eclipse中工作得很好,因为默认情况下它不打包我的应用程序.但是,当我从jar文件运行它时,我在packageUrl上得到一个NullPointerException.

那么,我如何获得jar中包的内容列表?我的研究建议使用getResourceAsStream,但我不太确定如何使用InputStream探索目录,如果可能的话.

解决方法:

您可以获取jar文件的路径,并使用ZipInputStream列出该jar文件中的所有文件.

要知道正在运行的jar的路径,请尝试使用:

InputStream in = MyClass

.class

.getProtectionDomain()

.getCodeSource()

.getLocation()

.openStream();

更新

我编写了一个运行您的解决方案并且工作完美:

C:\java\injar>dir

El volumen de la unidad C no tiene etiqueta.

El número de serie del volumen es: 22A8-203B

Directorio de C:\java\injar

21/02/2011 06:23 p.m.

21/02/2011 06:23 p.m.

21/02/2011 06:23 p.m. 1,752 i18n.jar

21/02/2011 06:23 p.m.

21/02/2011 06:21 p.m.

C:\java\injar>jar -tf i18n.jar

META-INF/

META-INF/MANIFEST.MF

I18n.class

x/

x/y/

x/y/z/

x/y/z/hola.txt

C:\java\injar>type src\I18n.java

import java.util.*;

import java.net.*;

import java.util.jar.*;

class I18n {

public static void main( String ... args ) {

getLocaleListFromJar();

}

private static List getLocaleListFromJar() {

List locales = new ArrayList();

try {

URL packageUrl = I18n.class.getProtectionDomain().getCodeSource().getLocation();

JarInputStream jar = new JarInputStream(packageUrl.openStream());

while (true) {

JarEntry entry = jar.getNextJarEntry();

if (entry == null) {

System.out.println( "entry was null ");

break;

}

String name = entry.getName();

System.out.println( "found : " +name );

/*if (resourceBundlePattern.matcher(name).matches()) {

addLocaleFromResourceBundle(name, locales);

}*/

}

} catch (Exception e) {

System.err.println(e);

return null;

//return getLocaleListFromFile(); // File based implementation in case resources are not in jar

}

return locales;

}

}

C:\java\injar>java -jar i18n.jar

found : I18n.class

found : x/

found : x/y/

found : x/y/z/

found : x/y/z/hola.txt

entry was null

标签:java,jar,classloader

来源: https://codeday.me/bug/20190726/1544001.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值