Единственное, что вам действительно нужно сделать, это получить имя файла из имени узла "nt: file", а содержимое файла из свойства "jcr: data" в "jcr: content" "дочерний узел.
JCR 1.0 и 2.0 немного отличаются тем, как вы получаете поток для двоичного значения свойства "jcr: data". Если вы используете JCR 1.0, код будет выглядеть так:
Node fileNode = // find this somehow
Node jcrContent = fileNode.getNode("jcr:content");
String fileName = fileNode.getName();
InputStream content = jcrContent.getProperty("jcr:data").getStream();
Если вы используете JCR 2.0, последняя строка немного отличается, потому что сначала вы должны получить двоичный объект из значения свойства:
InputStream content = jcrContent.getProperty("jcr:data").getBinary().getStream();
Затем вы можете использовать стандартную утилиту потока Java, чтобы записать байты из потока контента в файл.
Когда вы закончите работу с двоичным объектом, обязательно вызовите метод dispose()
двоичного файла, чтобы сообщить о том, что вы завершили работу с двоичным файлом и что реализация может высвободить все ресурсы, полученные двоичным объектом. Вы всегда должны делать это, даже если некоторые реализации JCR пытаются отлавливать ошибки программирования, возвращая поток, который при закрытии автоматически вызовет для вас dispose()
.