你上面的回答有问题,else { // 如果已经是同一级目录 catalog.setParentId(parentId); // 继续沿用上一级的目录ID },catalog报红
时间: 2024-12-19 19:20:59 浏览: 4
对不起,我理解有误。如果`childs[i]`是一个目录,但在尝试设置`catalog.getParentId()`时出现问题,可能是由于`catalogMapper.insertConDocumentCatalog(catalog)`这一步操作之前,`parentId`还没有被正确保存。为了修复这个问题,你可以在插入目录信息前确认`parentId`已经被设置。
以下是修正过的代码段:
```java
private void traverseFiles(File f, int level, Long parentId, Long projectId, boolean isSameLevel) {
File[] childs = f.listFiles();
for (int i = 0; i < Objects.requireNonNull(childs).length; i++) {
if (childs[i].isDirectory()) {
if (!isSameLevel) { // 如果新发现的是同级目录
ConDocumentCatalog catalog = new ConDocumentCatalog();
catalog.setParentId(projectId); // 设置当前为项目ID
catalog.setAncestors("0"); // 初始化祖先链
catalog.setCatalogName(childs[i].getName());
catalog.setProjectId(projectId);
catalog.setCreateBy(SecurityUtils.getUsername());
catalog.setCreateTime(DateUtils.getNowDate());
catalog.setUpdateBy(SecurityUtils.getUsername());
catalog.setUpdateTime(DateUtils.getNowDate());
// 先尝试保存目录信息,确保parentId已设置
try {
catalogMapper.insertConDocumentCatalog(catalog);
parentId = catalog.getCatalogId(); // 获取新目录的id
} catch (Exception e) {
logger.error("Inserting directory failed with error: ", e);
}
isSameLevel = true;
} else { // 如果已经是同一级目录
catalog.setParentId(parentId); // 继续沿用上一级的目录ID
}
// 无论是否成功插入,都需要更新目录信息
catalogMapper.updateConDocumentCatalog(catalog); // 更新目录信息
isSameLevel = false; // 结束这一级目录的处理
traverseFiles(childs[i], level + 1, parentId, projectId, isSameLevel); // 递归处理下级
} else {
// 新增并上传文件...
}
}
}
```
这里我们添加了异常处理,并在成功保存目录之后再设置`parentId`,如果失败则不会影响后续的处理。在处理同级目录的情况下,我们会直接更新目录信息而不再插入。
阅读全文