检查文件夹是否存在
Check if folder exists
我的结构如下
MyRootFolder
└──subfolder1
└──subfolder2
.
.
.
└──subfolder n
我有一个要求,我需要检查根文件夹中是否存在子文件夹,如果不存在则创建它。我找不到直接 API 来检查子文件夹是否存在。相反,我看到 API 像
folder.get_SubFolders();
这会给我一个所有子文件夹的列表,然后迭代检查子文件夹是否存在。这里的问题是我可能最终不得不迭代许多我不想做的文件夹。有没有不同的方法来实现这一目标?我正在使用 Filenet 5.2.1
好的,这是我能找到的最接近的选项。
使用以下查询在 FileNet 中搜索子文件夹。
SELECT FolderName FROM Folder WHERE FolderName='subfolder1' and Parent=OBJECT({parent-folder-guid})
如果以上搜索 returns 结果,如果没有创建子文件夹,则子文件夹存在。
另一种方法可能是 - 您尝试创建一个您想要的文件夹,如果已经存在则不要创建它,否则请创建它。要实现它,您不必遍历现有文件夹。我对我的一个项目有同样的要求,我必须将内容从共享驱动器移动到 FileNet P8 并为它们分配属性,同时保持相同的文件夹路径。以下代码段可能会对某人有所帮助:
public static Folder createFolderStructure() {
Connection conn = Factory.Connection.getConnection(ConfigInfo.CE_URI);
Domain dom = Factory.Domain.getInstance(conn, null);
ObjectStore os = Factory.ObjectStore.getInstance(dom,
ConfigInfo.OBJECT_STORE_NAME);
Folder folder = null;
// pass your desired folder string here, excluding the starting root "/"
String folderpath = "APITest/some/folder/2014/12/2";
System.out.println("\nGiven input folder path is :: " + folderpath + "\n");
String[] myarray = folderpath.split("/");
for (int x = 0; x < myarray.length; x++) {
try {
if (x == 0) {
folder = Factory.Folder.createInstance(os, null);
Folder rootFolder = Factory.Folder.getInstance(os, null, "/");
folder.set_Parent(rootFolder);
folder.set_FolderName(myarray[x]);
System.out.println("Creating main (first) folder.. \t" + myarray[x]);
folder.save(RefreshMode.NO_REFRESH);
} else {
String currentfolder = myarray[x];
String parentfolder = "";
for (int i = 0; i < x; i++) {
folder = Factory.Folder.createInstance(os, null);
parentfolder = parentfolder + "/" + myarray[i];
Folder nxtrootFolder = Factory.Folder.getInstance(os, null, parentfolder);
folder.set_Parent(nxtrootFolder);
folder.set_FolderName(currentfolder);
}
System.out
.println("Trying to create " + currentfolder + " in " + parentfolder);
folder.save(RefreshMode.NO_REFRESH);
}
} catch (EngineRuntimeException ere) {
ExceptionCode code = ere.getExceptionCode();
if (code != ExceptionCode.E_NOT_UNIQUE) {
throw ere;
}
System.out.println("Above folder already exists...skipping...");
}
}
return folder;
}
这是从我自己复制的blog。
我的结构如下
MyRootFolder
└──subfolder1
└──subfolder2
.
.
.
└──subfolder n
我有一个要求,我需要检查根文件夹中是否存在子文件夹,如果不存在则创建它。我找不到直接 API 来检查子文件夹是否存在。相反,我看到 API 像
folder.get_SubFolders();
这会给我一个所有子文件夹的列表,然后迭代检查子文件夹是否存在。这里的问题是我可能最终不得不迭代许多我不想做的文件夹。有没有不同的方法来实现这一目标?我正在使用 Filenet 5.2.1
好的,这是我能找到的最接近的选项。
使用以下查询在 FileNet 中搜索子文件夹。
SELECT FolderName FROM Folder WHERE FolderName='subfolder1' and Parent=OBJECT({parent-folder-guid})
如果以上搜索 returns 结果,如果没有创建子文件夹,则子文件夹存在。
另一种方法可能是 - 您尝试创建一个您想要的文件夹,如果已经存在则不要创建它,否则请创建它。要实现它,您不必遍历现有文件夹。我对我的一个项目有同样的要求,我必须将内容从共享驱动器移动到 FileNet P8 并为它们分配属性,同时保持相同的文件夹路径。以下代码段可能会对某人有所帮助:
public static Folder createFolderStructure() {
Connection conn = Factory.Connection.getConnection(ConfigInfo.CE_URI);
Domain dom = Factory.Domain.getInstance(conn, null);
ObjectStore os = Factory.ObjectStore.getInstance(dom,
ConfigInfo.OBJECT_STORE_NAME);
Folder folder = null;
// pass your desired folder string here, excluding the starting root "/"
String folderpath = "APITest/some/folder/2014/12/2";
System.out.println("\nGiven input folder path is :: " + folderpath + "\n");
String[] myarray = folderpath.split("/");
for (int x = 0; x < myarray.length; x++) {
try {
if (x == 0) {
folder = Factory.Folder.createInstance(os, null);
Folder rootFolder = Factory.Folder.getInstance(os, null, "/");
folder.set_Parent(rootFolder);
folder.set_FolderName(myarray[x]);
System.out.println("Creating main (first) folder.. \t" + myarray[x]);
folder.save(RefreshMode.NO_REFRESH);
} else {
String currentfolder = myarray[x];
String parentfolder = "";
for (int i = 0; i < x; i++) {
folder = Factory.Folder.createInstance(os, null);
parentfolder = parentfolder + "/" + myarray[i];
Folder nxtrootFolder = Factory.Folder.getInstance(os, null, parentfolder);
folder.set_Parent(nxtrootFolder);
folder.set_FolderName(currentfolder);
}
System.out
.println("Trying to create " + currentfolder + " in " + parentfolder);
folder.save(RefreshMode.NO_REFRESH);
}
} catch (EngineRuntimeException ere) {
ExceptionCode code = ere.getExceptionCode();
if (code != ExceptionCode.E_NOT_UNIQUE) {
throw ere;
}
System.out.println("Above folder already exists...skipping...");
}
}
return folder;
}
这是从我自己复制的blog。