Open sleepybear1113 opened 1 year ago
下版本修复
---原始邮件--- 发件人: @.> 发送时间: 2023年7月27日(周四) 凌晨0:57 收件人: @.>; 抄送: @.***>; 主题: [zfile-dev/zfile] 自动创建 sqlite.db 的路径问题导致创建失败 (Issue #568)
为了帮助我们更好的解决您的问题,请填写以下选项(不填写完整可能会被直接关闭 issue):
是否已搜索其他 issue,没有人提过这个问题?:y
是否已查阅、搜索 ZFile 文档,尤其是常见问题页,仍然未解决?:y
当前 ZFile 版本:最新开源 4.1.5
项目路径:Windows 下 D:\Code\Java\Spring\zfile
问题:修改 application.properties(我这里改成 yml 了)中 sqlite 的 path,改为非 ${user.home}/.zfile-v4/db/zfile 的绝对路径,使用了相对路径 zfile-v4/db/zfile.db。出现了创建 db 文件失败的情况。
涉及 Java 文件:im.zhaojun.zfile.core.config.MyBatisPlusConfig#init
原因:使用 java8 debug 后,发现 hutool 的 FileUtil 中所有操作文件的都是基于 classpath 的。也就是说,FileUtil.getParent(path, 1) 返回的是基于 classpath 的地址(我这是 D:\Code\Java\Spring\zfile\target\classes\zfile-v4\db)而不是 D:\Code\Java\Spring\zfile\zfile-v4\db。导致了 db 文件创建到不应该的地方。这里附上 hutool 官方解释的 issue 链接:issue2559。同时附上 debug 的图:
我的理解:修改配置文件后,使用相对路径创建的 sqlite.db 应该是在 jar 包同级目录,而不是走的 classpath。导致使用相对路径后,出现了带 ! 的文件夹,如图
解决:不使用 hutool 的 FileUtil.getParent 函数,使用原生的 File 来新建多级路径。目前我改成如下,默认参数的路径和相对路径均测试通过。
public void init() { if (StrUtil.equals(datasourceDriveClassName, "org.sqlite.JDBC")) { String path = datasourceUrl.replace("jdbc:sqlite:", ""); String folderPath = FileUtil.getAbsolutePath(new File(path).getParentFile()); log.info("SQLite 数据库文件所在目录: [{}]", folderPath); File file = new File(folderPath); if (!file.exists()) { log.info("检测到 SQLite 数据库文件所在目录不存在, 已自动创建."); if (!file.mkdirs()) { log.error("SQLite 数据库文件创建失败."); } } else { log.info("检测到 SQLite 数据库文件所在目录已存在, 无需自动创建."); } } }
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>
为了帮助我们更好的解决您的问题,请填写以下选项(不填写完整可能会被直接关闭 issue):
是否已搜索其他 issue,没有人提过这个问题?:y
是否已查阅、搜索 ZFile 文档,尤其是常见问题页,仍然未解决?:y
当前 ZFile 版本:最新开源 4.1.5
项目路径:Windows 下
D:\Code\Java\Spring\zfile
问题:修改
application.properties
(我这里改成 yml 了)中 sqlite 的 path,改为非${user.home}/.zfile-v4/db/zfile
的绝对路径,使用了相对路径zfile-v4/db/zfile.db
。出现了创建 db 文件失败的情况。涉及 Java 文件:
im.zhaojun.zfile.core.config.MyBatisPlusConfig#init
原因:使用 java8 debug 后,发现 hutool 的 FileUtil 中所有操作文件的都是基于 classpath 的。也就是说,
FileUtil.getParent(path, 1)
返回的是基于 classpath 的地址(我这是D:\Code\Java\Spring\zfile\target\classes\zfile-v4\db
)而不是D:\Code\Java\Spring\zfile\zfile-v4\db
。导致了 db 文件创建到不应该的地方。这里附上 hutool 官方解释的 issue 链接:issue2559。同时附上 debug 的图:我的理解:修改配置文件后,使用相对路径创建的 sqlite.db 应该是在 jar 包同级目录,而不是走的 classpath。导致使用相对路径后,出现了带 ! 的文件夹,如图
解决:不使用 hutool 的
FileUtil.getParent
函数,使用原生的 File 来新建多级路径。目前我改成如下,默认参数的路径和相对路径均测试通过。