java 文件

来源:互联网 发布:淘宝psd模板怎么用 编辑:程序博客网 时间:2024/05/23 13:18

Java常见的对文件操作的类:

java.io.File:文件系统中的目录和文件

java.util.zip.ZipFile:压缩文件

java.util.jar.JarFile:jar文件

java.util.Properties:以key和value为格式的文件。通常是properties文件

 

除了以上常用的文件,还是一些特殊的文件,比如vfs文件

现在很多应用服务器发布war包后,都是通过vfs文件来访问war包下的文件,如:vfs:/D:/ test.war/WEB-INF/lib/test.jar/plugins/

最常见的就是加载war包下的配置文件,用File是不能加载的,可以用classLoader.getResourceAsStream来加载。但如果要遍历war包下某个目录。只能通过应用服务器支持的虚拟文件来操作,

如jboss-vfs-3以上: org.jboss.vfs.VirtualFile

Spring的配置文件如果用通配符来加载:classpath*:spring/applicationContext*.xml

早期版本是不支持的,在spring3以后修复了这个问题

 

PathMatchingResourcePatternResolver源码:

 

    protected Resource[] findPathMatchingResources(StringlocationPattern)throws IOException {

       String rootDirPath = determineRootDir(locationPattern);

       String subPattern =locationPattern.substring(rootDirPath.length());

       Resource[] rootDirResources = getResources(rootDirPath);

       Set<Resource> result = new LinkedHashSet<Resource>(16);

       for (Resource rootDirResource : rootDirResources) {

           rootDirResource = resolveRootDirResource(rootDirResource);

           if (isJarResource(rootDirResource)) {

              result.addAll(doFindPathMatchingJarResources(rootDirResource,subPattern));

           }

           elseif (rootDirResource.getURL().getProtocol().startsWith(ResourceUtils.URL_PROTOCOL_VFS)){

               result.addAll(VfsResourceMatchingDelegate.findMatchingResources(rootDirResource,subPattern, getPathMatcher()));

           }

           else {

              result.addAll(doFindPathMatchingFileResources(rootDirResource,subPattern));

           }

       }

       if (logger.isDebugEnabled()) {

           logger.debug("Resolvedlocation pattern [" + locationPattern+"] to resources " + result);

       }

       return result.toArray(new Resource[result.size()]);

    }

注意:如果你的项目中有一套自己的资源配置类,就需要把vfs考虑进来(除非你的所有资源配置文件都可以通过war包外加载)。

0 0
原创粉丝点击