public static long getFileKey(Path filePath) { if (!Files.exists(filePath)) { return -1; } try { if (OSDetector.isApple()) { Xattrj xattrj = getXattrj(); if (xattrj == null) { return -1; } String fileKey = xattrj.readAttribute(filePath.toFile(), "fileKey"); if (fileKey == null) { return -1; } return Long.parseLong(fileKey); } else { UserDefinedFileAttributeView userDefinedFileAttributeView = Files.getFileAttributeView(filePath, UserDefinedFileAttributeView.class); List<String> list = userDefinedFileAttributeView.list(); if (!list.contains("fileKey")) { return -1; } ByteBuffer byteBuffer = ByteBuffer.allocate(userDefinedFileAttributeView.size("fileKey")); userDefinedFileAttributeView.read("fileKey", byteBuffer); CharBuffer charBuffer = _CHARSET.decode((ByteBuffer) byteBuffer.flip()); return Long.parseLong(charBuffer.toString()); } } catch (Exception e) { _logger.error(e.getMessage(), e); return -1; } }
protected static void doWriteFileKey(Path filePath, String fileKey) { if (hasFileKey(filePath, Long.parseLong(fileKey))) { return; } if (OSDetector.isApple()) { Xattrj xattrj = getXattrj(); if (xattrj == null) { return; } File file = filePath.toFile(); if (!file.canWrite()) { file.setWritable(true); } xattrj.writeAttribute(file, "fileKey", fileKey); } else { File file = filePath.toFile(); if (!file.canWrite()) { file.setWritable(true); } UserDefinedFileAttributeView userDefinedFileAttributeView = Files.getFileAttributeView(filePath, UserDefinedFileAttributeView.class); try { userDefinedFileAttributeView.write("fileKey", _CHARSET.encode(CharBuffer.wrap(fileKey))); } catch (Exception e) { _logger.error(e.getMessage(), e); } } }