如何从当前类(如MigrationGenerator)获取对应文件夹(如migrations)的路径
类到指定文件夹路径的实现方法

你需要获取从MigrationGenerator类到migrations文件夹的路径,用于生成filePath给outter.output(migrationDocument, new FileWriter(filePath));这段代码使用,具体可按以下两种方式实现:
方法1:基于类定位的相对路径获取
import java.io.File; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Paths; public class PathUtil { public static String getMigrationFilePath(String fileName) throws URISyntaxException { // 获取MigrationGenerator类的编译后存放位置 URL classUrl = MigrationGenerator.class.getProtectionDomain().getCodeSource().getLocation(); File classRootDir = new File(classUrl.toURI()); // 按照你的目录层级调整,示例是从类编译目录向上退3层到项目根,再进入migrations文件夹 String filePath = Paths.get(classRootDir.getParent(), "..", "..", "migrations", fileName).toString(); return filePath; } }
注意:需要根据你实际的编译输出目录结构调整相对层级,避免路径错位
方法2:固定目录配置(更稳定,推荐使用)
直接配置migrations的根目录,无需和类路径绑定,适配各种开发、部署场景:
- 提前创建好migrations文件夹,或者在代码里做自动创建判断
- 直接拼接路径即可,代码如下:
// 可根据环境调整目录路径,开发环境用相对路径,生产环境可配绝对路径 String migrationRootDir = "./migrations"; File dir = new File(migrationRootDir); // 目录不存在则自动创建 if (!dir.exists()) { dir.mkdirs(); } // 拼接生成最终文件路径 String filePath = Paths.get(migrationRootDir, "你的迁移文件名.sql").toString(); // 执行输出 outter.output(migrationDocument, new FileWriter(filePath));
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

