在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文件和其中的文件目录。
版权声明:本文为huyangyamin原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。