Java 保留大小写的LDIF读取器/解析器/流

Java 保留大小写的LDIF读取器/解析器/流,java,ldap,ldif,Java,Ldap,Ldif,我必须读取LDIF文件,拆分条目,修改它们,然后将结果写入LDIF文件 我在Apache目录LDAP API(org.Apache.Directory.API:API LDAP客户端API)中找到了一个LdifReader,因此我尝试了如下方法: Stream<LdifEntry> stream = StreamSupport.stream(reader.spliterator(), false); Predicate<LdifEntry> isEnabled = ent

我必须读取LDIF文件,拆分条目,修改它们,然后将结果写入LDIF文件

我在Apache目录LDAP API(
org.Apache.Directory.API:API LDAP客户端API
)中找到了一个LdifReader,因此我尝试了如下方法:

Stream<LdifEntry> stream = StreamSupport.stream(reader.spliterator(), false);
Predicate<LdifEntry> isEnabled = entry -> entry.get("pwdAccountLockedTime") == null;
Map<Boolean, List<LdifEntry>> parts = stream.collect(Collectors.partitioningBy(isEnabled));
List<LdifEntry> enabledAccounts = parts.get(true);
List<LdifEntry> disabledAccounts = parts.get(false);
Stream-Stream=StreamSupport.Stream(reader.spliterator(),false);
谓词isEnabled=entry->entry.get(“pwdAccountLockedTime”)==null;
Map parts=stream.collect(收集器.partitionBy(isEnabled));
List enabledAccounts=parts.get(true);
List disabledAccounts=parts.get(false);
效果很好。然而,由于某些原因,所有属性名称/ID都是小写的(“pwdAccountLockedTime”变成了“pwdAccountLockedTime”,等等),但我需要它们原样(保留大小写)–以便保持与以前相同的人类可读性

你知道怎么做吗?如果需要,我将使用不同的库


注意:我想改进我的问题,因为我得到了一些反对票。请告诉我,它出了什么问题或缺少了什么。

我可以通过将库替换为
org.springframework.ldap:spring ldaf-core
并编写一个小助手来解决我的问题

public class LdifUtils {
    /**
     * Reads an LDIF file and returns its entries as a collection 
     * of <code>LdapAttributes</code> (LDAP entries).
     * <br>
     * Note: This method is not for huge files, 
     * as the content is loaded completely into memory.
     *
     * @param pathToLdifFile the <code>Path</code> to the LDAP Data Interchange Format file
     * @return a <code>Collection</code> of <code>LdapAttributes</code> (LDAP entries)
     * @throws IOException if reading the file fails
     */
    public static Collection<LdapAttributes> read(final Path pathToLdifFile) throws IOException {
        final LdifParser ldifParser = new LdifParser(pathToLdifFile.toFile());
        ldifParser.open();
        final Collection<LdapAttributes> c = new LinkedList<>();
        while (ldifParser.hasMoreRecords()){
            c.add(ldifParser.getRecord());
        }
        ldifParser.close();
        return c;
    }
}
像以前一样

final Stream<LdapAttributes> stream = LdifUtils.read(path).stream();
final Predicate<LdapAttributes> isEnabled = entry -> entry.get("pwdAccountLockedTime") == null;
final Map<Boolean, List<LdapAttributes>> parts = stream.collect(Collectors.partitioningBy(isEnabled));
final List<LdapAttributes> enabledAccounts = parts.get(true);
final List<LdapAttributes> disabledAccounts = parts.get(false);
logger.info("enabled accounts: " + enabledAccounts.size());
logger.info("disabled accounts: " + disabledAccounts.size());
final Stream=LdifUtils.read(path.Stream();
最终谓词isEnabled=entry->entry.get(“pwdAccountLockedTime”)==null;
最终映射部分=stream.collect(收集器.partitionby(isEnabled));
最终列表enabledAccounts=parts.get(true);
最终列表disabledAccounts=parts.get(false);
info(“已启用帐户:+enabledAccounts.size());
info(“禁用的帐户:+disabledAccounts.size());

注意:我想改进我的答案,因为我得到了一些反对票。请告诉我,它有什么问题或缺少什么。

正如我所解释的,要求是保留属性的人类可读性。