繁体   English   中英

列出打包战争中的文件

[英]List files from inside a packaged war

我有一个.ear ,一个.jar和一个.war包。 我通过检查文件系统并注册映射来阅读我的servlet类。

事情是它适用于开发,我能够读取目录和正确的文件名确实能够创建映射。 问题是,如果我打包我的耳朵它不起作用:

  • 使用新File( ... ).isDirectory()
    • 检查我是否在目录中,对于有效的目录路径,返回始终为false。
  • 使用新File( ... ).listFiles()
    • 为了能够列出目录中的文件,对于有效的目录路径,返回始终为null

我通过检测不以扩展名结束的结束路径解决了目录检查问题(为了我的目的,此类验证已经足够),但我仍然无法列出给定路径中的文件。

鉴于这种情况,我有一个问题:

如何在运行时从包.war列出文件名?

目前的代码:

private void addAllFiles( File dir, ArrayList<ConventionPath> list ) {
    for ( File file : dir.listFiles() ) { // dir.listFiles() comes null here =/
        String absolutePath = file.getAbsolutePath();

        boolean isActionDir = ConventionFiles.isActionDir( absolutePath, fileSeparator );
        boolean isActionFile = ConventionFiles.isActionFile( absolutePath );

        if ( isActionDir ) {
            addAllFiles( file, list );
        }

        if ( isActionDir || isActionFile ) {
            ConventionPath conventionPath =
                new ConventionPath( absolutePath, fileSeparator );
            list.add( conventionPath );
        }
    }
}

现在我做到了。

我没有通过文件系统访问文件,而是使用了servlet上下文(我想这是正确的方法):

URL root = context.getResource( "/WEB-INF/classes/com/package/" );

// /default-host/WEB-INF/classes/
String rootPath = root.getPath();

// /WEB-INF/classes/
rootPath = rootPath.substring( rootPath.indexOf( "/WEB-INF" ), rootPath.length() );

然后递归地从资源中获取我想要的信息:

Set<String> resourcesPath = context.getResourcePaths( rootPath );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM