如何查找包含其子节点的jcr节点的大小?

时间:2016-03-12 05:17:45

标签: jcr jackrabbit jcr-sql2

我正在使用Jackrabbit 2.8.0和JCR 2.0,我正在为一个组织开发一个项目,以便它的用户可以使用他们的用户帐户以数字格式存储他们的文档和目录。我想为所有用户提供大小配额限制。为了跟踪大小,我试图获得任何JCR节点的大小,包括其子节点。 任何形式的帮助都会非常值得注意。 提前致谢

//jcr session after login to repository with user credentials            
Session jcrsession = sessions.getSession();
Node root = jcrsession.getRootNode();

//added a file type node to root            
file = root.addNode(fileName, Config.EDMS_DOCUMENT);
file.setProperty(Config.EDMS_SIZE, filesize);
InputStream isss= new ByteArrayInputStream(decodedBaseData);
Binary myBinary = valueFactory.createBinary(isss);
file.addMixin("mix:referenceable");

//added a node which will contain binary file           
Node resNode = file.addNode(Config.EDMS_CONTENT,"edms:resource");
    try {
          //added binary data to node
          resNode.setProperty("jcr:data",myBinary);
        } catch (IOException e) {
                e.printStackTrace();
        }finally{
                myBinary.dispose();
                isss.close();
        }
jcrsession.save();

这是我添加文档类型节点的方法,现在我想得到一个节点的大小(以KB为单位),该节点可能有多个子节点,无论是文件夹类型还是文件类型。

1 个答案:

答案 0 :(得分:2)

在[1]指定JCR Property.getLength()方法以返回二进制属性的长度(以字节为单位),因此如果您拥有上述resNode,则resNode.getProperty("jcr:data").getLength()应返回二进制大小

然后,您可以使用Node.getNodes()遍历树以递归计算总大小。

请注意,如果实现无法确定长度,getLength()可以返回-1,因此您必须检查您正在使用的JCR实现和文件存储实现的任何可能的约束。

[1] https://www.day.com/maven/jsr170/javadocs/jcr-2.0/javax/jcr/Property.html#getLength%28%29