jar文件读取和遍历

来源:互联网 发布:linux执行命令后循环 编辑:程序博客网 时间:2024/05/16 07:09

在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.0j3daudio.jarcomcom/suncom/sun/j3dcom/sun/j3d/audioenginescom/sun/j3d/audioengines/headspacecom/sun/j3d/audioengines/javasoundcom/sun/j3d/utilscom/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.jarJar Entry: META-INF/INDEX.LISTjar entry: META-INF/jar entry: META-INF/MANIFEST.MFjar 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.TXTjar entry: com/sun/j3d/ExceptionStrings.propertiesjar entry: com/sun/j3d/audioengines/AudioEngine.classjar entry: com/sun/j3d/audioengines/AudioEngine3D.classjar entry: com/sun/j3d/audioengines/AudioEngine3DL2.classjar entry: com/sun/j3d/audioengines/AudioEngineThread.classjar entry: com/sun/j3d/audioengines/AuralParameters.classjar entry: com/sun/j3d/audioengines/Sample.classjar entry: com/sun/j3d/audioengines/headspace/ActionExceptionWrapper.classjar entry: com/sun/j3d/audioengines/headspace/ActionWrapper.classjar entry: com/sun/j3d/audioengines/headspace/AudioAiffInputStream.classjar entry: com/sun/j3d/audioengines/headspace/AudioAuInputStream.classjar entry: com/sun/j3d/audioengines/headspace/AudioClipData.classjar entry: com/sun/j3d/audioengines/headspace/AudioContainerInputStream.classjar entry: com/sun/j3d/audioengines/headspace/AudioData.classjar entry: com/sun/j3d/audioengines/headspace/AudioDataStream.classjar entry: com/sun/j3d/audioengines/headspace/AudioDevice.classjar entry: com/sun/j3d/audioengines/headspace/AudioEnvironment.classjar entry: com/sun/j3d/audioengines/headspace/AudioFormat.classjar entry: com/sun/j3d/audioengines/headspace/AudioMidiInputStream.classjar entry: com/sun/j3d/audioengines/headspace/AudioPlayer$1.classjar entry: com/sun/j3d/audioengines/headspace/AudioPlayer$2.classjar entry: com/sun/j3d/audioengines/headspace/AudioPlayer.classjar entry: com/sun/j3d/audioengines/headspace/AudioRmfInputStream.classjar entry: com/sun/j3d/audioengines/headspace/AudioSecurity.classjar entry: com/sun/j3d/audioengines/headspace/AudioSecurityAction.classjar entry: com/sun/j3d/audioengines/headspace/AudioSecurityActionException.classjar entry: com/sun/j3d/audioengines/headspace/AudioSecurityExceptionAction.classjar entry: com/sun/j3d/audioengines/headspace/AudioStream.classjar entry: com/sun/j3d/audioengines/headspace/AudioStreamSequence.classjar entry: com/sun/j3d/audioengines/headspace/AudioTranslatorStream.classjar entry: com/sun/j3d/audioengines/headspace/AudioWavInputStream.classjar entry: com/sun/j3d/audioengines/headspace/BadAudioHeaderException.classjar entry: com/sun/j3d/audioengines/headspace/ContinuousAudioDataStream.classjar entry: com/sun/j3d/audioengines/headspace/Format.classjar entry: com/sun/j3d/audioengines/headspace/HAEDirectionalSample.classjar entry: com/sun/j3d/audioengines/headspace/HAEPositionalSample.classjar entry: com/sun/j3d/audioengines/headspace/HAESample.classjar entry: com/sun/j3d/audioengines/headspace/HAEShutdownHook$1.classjar entry: com/sun/j3d/audioengines/headspace/HAEShutdownHook$2.classjar entry: com/sun/j3d/audioengines/headspace/HAEShutdownHook.classjar entry: com/sun/j3d/audioengines/headspace/HaeAudioStream.classjar entry: com/sun/j3d/audioengines/headspace/HaeAudioStreamClip.classjar entry: com/sun/j3d/audioengines/headspace/HaeDevice.classjar entry: com/sun/j3d/audioengines/headspace/HaeException.classjar entry: com/sun/j3d/audioengines/headspace/HaeMidiNoise.classjar entry: com/sun/j3d/audioengines/headspace/HaeMidiSong.classjar entry: com/sun/j3d/audioengines/headspace/HaeMixer$1.classjar entry: com/sun/j3d/audioengines/headspace/HaeMixer$2.classjar entry: com/sun/j3d/audioengines/headspace/HaeMixer$3.classjar entry: com/sun/j3d/audioengines/headspace/HaeMixer$4.classjar entry: com/sun/j3d/audioengines/headspace/HaeMixer$5.classjar entry: com/sun/j3d/audioengines/headspace/HaeMixer$6.classjar entry: com/sun/j3d/audioengines/headspace/HaeMixer.classjar entry: com/sun/j3d/audioengines/headspace/HaeNoise.classjar entry: com/sun/j3d/audioengines/headspace/HaePlayable.classjar entry: com/sun/j3d/audioengines/headspace/HaeRmfSong.classjar entry: com/sun/j3d/audioengines/headspace/HaeThread.classjar entry: com/sun/j3d/audioengines/headspace/HaeWaveNoise.classjar entry: com/sun/j3d/audioengines/headspace/HaeWaveStream.classjar entry: com/sun/j3d/audioengines/headspace/HaeWaveStreamBuffer.classjar entry: com/sun/j3d/audioengines/headspace/HeadspaceMixer.classjar entry: com/sun/j3d/audioengines/headspace/HeadspaceParams.classjar entry: com/sun/j3d/audioengines/headspace/HeadspaceThread.classjar entry: com/sun/j3d/audioengines/headspace/InvalidAudioFormatException.classjar entry: com/sun/j3d/audioengines/headspace/J3DHaeClip.classjar entry: com/sun/j3d/audioengines/headspace/J3DHaeMidi.classjar entry: com/sun/j3d/audioengines/headspace/J3DHaeStream.classjar entry: com/sun/j3d/audioengines/headspace/MediaInputStream.classjar entry: com/sun/j3d/audioengines/headspace/NativeAudioStream.classjar entry: com/sun/j3d/audioengines/headspace/SunAudioClip.classjar entry: com/sun/j3d/audioengines/javasound/JSAuralParameters.classjar entry: com/sun/j3d/audioengines/javasound/JSChannel.classjar entry: com/sun/j3d/audioengines/javasound/JSClip.classjar entry: com/sun/j3d/audioengines/javasound/JSDirectionalSample.classjar entry: com/sun/j3d/audioengines/javasound/JSMidi.classjar entry: com/sun/j3d/audioengines/javasound/JSPositionalSample.classjar entry: com/sun/j3d/audioengines/javasound/JSSample.classjar entry: com/sun/j3d/audioengines/javasound/JSStream.classjar entry: com/sun/j3d/audioengines/javasound/JSThread.classjar entry: com/sun/j3d/audioengines/javasound/JavaSoundMixer.classjar entry: com/sun/j3d/soundbank.gmjar entry: com/sun/j3d/utils/applet/LICENSE.TXTjar entry: META-INF/INDEX.LIST

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

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

0 0
原创粉丝点击