java 文件

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值