getClassLoader().getResource().getPath()获取Java项目路径

在正常开发的情况下,我们经常会遇到:需要获取指定文件路径,虽然我知道项目在本机的路径,一旦打包发布了,再根据绝对路径获取指定文件,肯定是获取不到的。这时候就需要用java给我们提供的一些获取相对路径方法了。

解决方法:

rootPath的值(我自己项目下的情况):

开发环境下:

image.png

war包部署到Tomcat环境下:

image.png

String rootPath = Your.class.getClassLoader().getResource(basePath).getPath();

自己针对项目写的代码:

/**
 * 获取项目路径org/jeecgframework/web/cgreport/engine/core下的所有.ftl文件名,用来拼接ftl模板路径
 * @return
 */
public static List<String> ftlFileFinding() {

    //项目目录
    String basePath = "org/jeecgframework/web/cgreport/engine/core";
    //目标文件后缀
    String fileExtension = ".ftl";
    //存放.ftl后缀的文件名
    List<String> ftlFiles = new ArrayList<>();

    //获取项目路径(根据项目环境动态获取,部署后仍然奏效)
    String rootPath = MuTiLangUtil.class.getClassLoader().getResource(basePath).getPath();
    File targetFolder = new File(rootPath);
    if (targetFolder.exists() && targetFolder.isDirectory()) {
        searchFtlFiles(targetFolder, fileExtension, ftlFiles);
    }

    return ftlFiles;

}

//查询指定文件目录下的所有指定后缀的文件名
private static void searchFtlFiles (File directory, String fileExtension, List<String> ftlFiles) {
    File[] files = directory.listFiles();

    if (files != null) {
        for (File file : files) {
        //此处不要用递归,可能会导致栈溢出或栈击穿
            // if (file.isDirectory()) {
            //     searchFtlFiles(file, fileExtension, ftlFiles);
            // } else if (file.getName().endsWith(fileExtension)) {
            //     ftlFiles.add(file.getName());
            // }
                if (file.getName().endsWith(fileExtension)) {
                ftlFiles.add(file.getName());
            }
        }
    }
}
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值