jar文件读取和遍历

在spring Resource中,根据ClassLoader可以加载资源,前提是必须有个指定的前缀,譬如:

classpath*:META-INF/*.indx

由于spring使用AntPathMatcher支持Ant格式的路径,但是必须有个前缀,否则只能找到当前java -classpath下面的目录,不能提取出java -classpath下面的jar包的文件。

因为ClassLoader.getResources("") 只返回目录,而不含jar包;


1. jar下面特定文件读取
        URL url = new URL("jar:file:/System/Library/Java/Extensions/j3daudio.jar!/META-INF/INDEX.LIST");
        InputStream inputStream = url.openConnection().getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

        String line = null;
        while( (line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }

结果是:

JarIndex-Version: 1.0

j3daudio.jar
com
com/sun
com/sun/j3d
com/sun/j3d/audioengines
com/sun/j3d/audioengines/headspace
com/sun/j3d/audioengines/javasound
com/sun/j3d/utils
com/sun/j3d/utils/applet
2. jar所有目录名称遍历
        URL url = new URL("jar:file:/System/Library/Java/Extensions/j3daudio.jar!/META-INF/INDEX.LIST");

JarURLConnection jarURLConnection = (JarURLConnection)url.openConnection();

        JarFile jarFile = jarURLConnection.getJarFile();

        System.out.println("Jar Name: " + jarFile.getName());
        System.out.println("Jar Entry: " + jarURLConnection.getJarEntry().getName());

        for(Enumeration<JarEntry> enumeration =  jarFile.entries(); enumeration.hasMoreElements(); ) {
            JarEntry jarEntry = enumeration.nextElement();

            System.out.println("jar entry: " + jarEntry.getName());
        }

结果:

Jar Name: /System/Library/Java/Extensions/j3daudio.jar
Jar Entry: META-INF/INDEX.LIST
jar entry: META-INF/
jar entry: META-INF/MANIFEST.MF
jar entry: com/
jar entry: com/sun/
jar entry: com/sun/j3d/
jar entry: com/sun/j3d/audioengines/
jar entry: com/sun/j3d/audioengines/headspace/
jar entry: com/sun/j3d/audioengines/javasound/
jar entry: com/sun/j3d/utils/
jar entry: com/sun/j3d/utils/applet/
jar entry: com/sun/j3d/COPYRIGHT.TXT
jar entry: com/sun/j3d/ExceptionStrings.properties
jar entry: com/sun/j3d/audioengines/AudioEngine.class
jar entry: com/sun/j3d/audioengines/AudioEngine3D.class
jar entry: com/sun/j3d/audioengines/AudioEngine3DL2.class
jar entry: com/sun/j3d/audioengines/AudioEngineThread.class
jar entry: com/sun/j3d/audioengines/AuralParameters.class
jar entry: com/sun/j3d/audioengines/Sample.class
jar entry: com/sun/j3d/audioengines/headspace/ActionExceptionWrapper.class
jar entry: com/sun/j3d/audioengines/headspace/ActionWrapper.class
jar entry: com/sun/j3d/audioengines/headspace/AudioAiffInputStream.class
jar entry: com/sun/j3d/audioengines/headspace/AudioAuInputStream.class
jar entry: com/sun/j3d/audioengines/headspace/AudioClipData.class
jar entry: com/sun/j3d/audioengines/headspace/AudioContainerInputStream.class
jar entry: com/sun/j3d/audioengines/headspace/AudioData.class
jar entry: com/sun/j3d/audioengines/headspace/AudioDataStream.class
jar entry: com/sun/j3d/audioengines/headspace/AudioDevice.class
jar entry: com/sun/j3d/audioengines/headspace/AudioEnvironment.class
jar entry: com/sun/j3d/audioengines/headspace/AudioFormat.class
jar entry: com/sun/j3d/audioengines/headspace/AudioMidiInputStream.class
jar entry: com/sun/j3d/audioengines/headspace/AudioPlayer$1.class
jar entry: com/sun/j3d/audioengines/headspace/AudioPlayer$2.class
jar entry: com/sun/j3d/audioengines/headspace/AudioPlayer.class
jar entry: com/sun/j3d/audioengines/headspace/AudioRmfInputStream.class
jar entry: com/sun/j3d/audioengines/headspace/AudioSecurity.class
jar entry: com/sun/j3d/audioengines/headspace/AudioSecurityAction.class
jar entry: com/sun/j3d/audioengines/headspace/AudioSecurityActionException.class
jar entry: com/sun/j3d/audioengines/headspace/AudioSecurityExceptionAction.class
jar entry: com/sun/j3d/audioengines/headspace/AudioStream.class
jar entry: com/sun/j3d/audioengines/headspace/AudioStreamSequence.class
jar entry: com/sun/j3d/audioengines/headspace/AudioTranslatorStream.class
jar entry: com/sun/j3d/audioengines/headspace/AudioWavInputStream.class
jar entry: com/sun/j3d/audioengines/headspace/BadAudioHeaderException.class
jar entry: com/sun/j3d/audioengines/headspace/ContinuousAudioDataStream.class
jar entry: com/sun/j3d/audioengines/headspace/Format.class
jar entry: com/sun/j3d/audioengines/headspace/HAEDirectionalSample.class
jar entry: com/sun/j3d/audioengines/headspace/HAEPositionalSample.class
jar entry: com/sun/j3d/audioengines/headspace/HAESample.class
jar entry: com/sun/j3d/audioengines/headspace/HAEShutdownHook$1.class
jar entry: com/sun/j3d/audioengines/headspace/HAEShutdownHook$2.class
jar entry: com/sun/j3d/audioengines/headspace/HAEShutdownHook.class
jar entry: com/sun/j3d/audioengines/headspace/HaeAudioStream.class
jar entry: com/sun/j3d/audioengines/headspace/HaeAudioStreamClip.class
jar entry: com/sun/j3d/audioengines/headspace/HaeDevice.class
jar entry: com/sun/j3d/audioengines/headspace/HaeException.class
jar entry: com/sun/j3d/audioengines/headspace/HaeMidiNoise.class
jar entry: com/sun/j3d/audioengines/headspace/HaeMidiSong.class
jar entry: com/sun/j3d/audioengines/headspace/HaeMixer$1.class
jar entry: com/sun/j3d/audioengines/headspace/HaeMixer$2.class
jar entry: com/sun/j3d/audioengines/headspace/HaeMixer$3.class
jar entry: com/sun/j3d/audioengines/headspace/HaeMixer$4.class
jar entry: com/sun/j3d/audioengines/headspace/HaeMixer$5.class
jar entry: com/sun/j3d/audioengines/headspace/HaeMixer$6.class
jar entry: com/sun/j3d/audioengines/headspace/HaeMixer.class
jar entry: com/sun/j3d/audioengines/headspace/HaeNoise.class
jar entry: com/sun/j3d/audioengines/headspace/HaePlayable.class
jar entry: com/sun/j3d/audioengines/headspace/HaeRmfSong.class
jar entry: com/sun/j3d/audioengines/headspace/HaeThread.class
jar entry: com/sun/j3d/audioengines/headspace/HaeWaveNoise.class
jar entry: com/sun/j3d/audioengines/headspace/HaeWaveStream.class
jar entry: com/sun/j3d/audioengines/headspace/HaeWaveStreamBuffer.class
jar entry: com/sun/j3d/audioengines/headspace/HeadspaceMixer.class
jar entry: com/sun/j3d/audioengines/headspace/HeadspaceParams.class
jar entry: com/sun/j3d/audioengines/headspace/HeadspaceThread.class
jar entry: com/sun/j3d/audioengines/headspace/InvalidAudioFormatException.class
jar entry: com/sun/j3d/audioengines/headspace/J3DHaeClip.class
jar entry: com/sun/j3d/audioengines/headspace/J3DHaeMidi.class
jar entry: com/sun/j3d/audioengines/headspace/J3DHaeStream.class
jar entry: com/sun/j3d/audioengines/headspace/MediaInputStream.class
jar entry: com/sun/j3d/audioengines/headspace/NativeAudioStream.class
jar entry: com/sun/j3d/audioengines/headspace/SunAudioClip.class
jar entry: com/sun/j3d/audioengines/javasound/JSAuralParameters.class
jar entry: com/sun/j3d/audioengines/javasound/JSChannel.class
jar entry: com/sun/j3d/audioengines/javasound/JSClip.class
jar entry: com/sun/j3d/audioengines/javasound/JSDirectionalSample.class
jar entry: com/sun/j3d/audioengines/javasound/JSMidi.class
jar entry: com/sun/j3d/audioengines/javasound/JSPositionalSample.class
jar entry: com/sun/j3d/audioengines/javasound/JSSample.class
jar entry: com/sun/j3d/audioengines/javasound/JSStream.class
jar entry: com/sun/j3d/audioengines/javasound/JSThread.class
jar entry: com/sun/j3d/audioengines/javasound/JavaSoundMixer.class
jar entry: com/sun/j3d/soundbank.gm
jar entry: com/sun/j3d/utils/applet/LICENSE.TXT
jar entry: META-INF/INDEX.LIST

说明:jar:file:/System/Library/Java/Extensions/j3daudio.jar!/

其中!/是特定分隔符,分隔jar文件和其中的文件目录。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值