我正在使用Lotus Notes / Domino的Java-API。我需要将Lotus-Documents放在auf Lotus-Folders(Views)中,它们像文件系统中的文件夹一样组织。
要查找并选择创建文件夹,我使用以下代码。 path-String使用反斜杠分隔符(即“TestFolder / SubFolder1 / SubSubFolder1”。文件夹按预期创建并显示在Notes客户端中。
View view = database.getView(path);
if (view == null) {
db.enableFolder(path);
view = db.getView(path);
}
如何找到特定文件夹的所有子文件夹?
现在我正在使用此解决方法。 Imho这不是很好,因为我总是阅读所有目录。当结构变大时,这可能会对性能产生影响。
List<View> result = new ArrayList<View>();
String prefix = getPath() + getSeparator();
for (Object obj : database.getViews()) {
View view = (View)obj;
if (view.isFolder()) {
String path = view.getName();
if (path.startsWith(prefix)) {
String suffix = path.substring(prefix.length());
if (suffix.indexOf(getSeparator()) == -1) {
result.add(view);
}
}
}
}
答案 0 :(得分:4)
不幸的是,没有真正快速的方法。如果你真的需要性能,那么使它快得多的唯一方法就是使用NoteCollection-Class并获取所有文件夹。然后运行表示文件夹的NotesDocuments并读取“$ Title”项。以下是执行此操作的示例代码:
NoteCollection nc = database.createNoteCollection(false);
nc.setSelectFolders(true);
nc.buildCollection();
String id = nc.getFirstNoteID();
while (id.length() > 0) {
String strFolderName = ""
Document docFolder = database.getDocumentByID(strFolderId);
strFolderName = docFolder.getItemValueString("$Title");
if (strFolderName.startsWith(prefix)) {
....
}
}
在我的测试中,这比使用getViews() - 方法快2-3倍。
答案 1 :(得分:0)
OP中的代码很好,除了分隔符总是“\” - 它不依赖于操作系统,所以不需要getSeparator调用。您可能还希望使用不区分大小写的文件夹名称比较,以防万一。
为此使用NoteCollection效率较低,因为它会扫描数据库中的所有注释,包括所有文档,而database.getViews使用设计集合将其快速缩小到仅查看注释。
以前访问View对象的属性只是为了查看它是否是您感兴趣的视图,因为它会更新视图索引。但在Notes的最新版本中,情况已不再如此。无论您有多少视图,通过getViews返回的集合进行浏览都可以获得良好的性能。