【问题标题】:Tool to find duplicate keys and value in properties file在属性文件中查找重复键和值的工具
【发布时间】:2009-11-22 16:34:21
【问题描述】:

是否有一种工具可以告诉我一个或多个属性文件中存在的冗余键和值。

【问题讨论】:

  • 您可能需要考虑集成测试而不是工具。这听起来很奇怪,但我已经写了一个(使用 JUnit)来帮助防止属性文件和我们的第 3 方翻译人员出现问题。
  • 简单易行的方法..从 google 获取 codePro AnalytiX,它是一个 Eclipse 插件。你可以审计你的代码,它会在属性文件中找到所有重复的键。
  • 几个月前我发现了。感谢您的评论 :)。

标签: java internationalization


【解决方案1】:
/**
 *  Purpose:  Properties doesn't detect duplicate keys.  So this exists.
 *  @author shaned
 */
package com.naehas.tests.configs;

import java.util.Properties;

import org.apache.log4j.Logger;

public class NaehasProperties extends Properties
{
   private static final long   serialVersionUID = 1L;

   private static final Logger log              = Logger.getLogger(NaehasProperties.class);

   public NaehasProperties()
   {
      super();
   }

   /**
    * @param defaults
    */
   public NaehasProperties(Properties defaults)
   {
      super(defaults);
   }

   /**
    * Overriding the HastTable put() so we can check for duplicates
    * 
    */
   public synchronized Object put(Object key, Object value)
   {
      // Have we seen this key before?
      //
      if (get(key) != null)
      {
         StringBuffer message = new StringBuffer("Duplicate key found: " + key + " with value: " + value);
         message.append(". Original value is: " + (String) get(key));

         log.error(message.toString());

         // Setting key to null will generate an exception and cause an exit.
         // Can not change the signature by adding a throws as it's not compatible
         // with HashTables put().
         //
         // If you commented out this line, you will see all the occurrences of the duplicate key
         // as the put will overwrite the past encounter.
         //
         key = null;
      }

      return super.put(key, value);
   }
}

【讨论】:

    【解决方案2】:

    有一个 Ant 任务 RscBundleCheck,它检查一组资源文件中是否存在重复键:

    http://rscbundlecheck.sourceforge.net/

    这是一种将重复属性检查集成到构建过程中的简单方法。

    【讨论】:

      【解决方案3】:

      我不知道是否有现成的工具,但是您应该能够编写一个简短的 Java 程序,或者用您熟悉的语言编写脚本,这样应该可以立即完成。然后你也可以拥有它以备将来使用。

      快速谷歌搜索产生以下http://www.javanb.com/netbeans/1/19793.html

      这有一个 gui 工具和一个可以执行此操作的脚本。

      【讨论】:

      • 我也找到了,不过好像太老了
      • 太旧了?你这话是什么意思?如果它当时有效,它现在将有效。还是属性文件格式在某个时候发生了变化?
      【解决方案4】:

      在 Netbeans 上有一个 sort line tools 插件,它可以选择删除重复项。如果属性是单行的,则效果很好。

      此外,对属性进行排序使该文件更具可读性。

      【讨论】:

        【解决方案5】:

        只写一个可能是最简单的:对于每个文件以及该文件中的每个属性,将属性键/值对放入 Map 中,但前提是确保该键不在 Map 中。如果是,则打印出文件名、键和两个值。

        【讨论】:

        • 是的,我正在用 groovy 写一个。但如果我们有的话,最好重用和创建。
        【解决方案6】:

        如果您使用的是 IDE,您可能会在其插件/功能中找到一个不错的工具。

        Eclipse 有一个管理属性文件的 ResourceBundle Editor 插件:

        http://www.eclipseplugincentral.com/Web_Links-index-req-viewlink-cid-331.html

        IntelliJ IDEA 8 及更高版本还能够管理属性文件并检查重复条目。

        【讨论】:

          【解决方案7】:

          我使用了两个不错的工具

          1. unival npm 包:这是一个用于检测重复键、值或行的命令行工具。

            npm 命令安装包:npm i unival

            链接:https://www.npmjs.com/package/unival

          2. unival 扩展:如果您使用 vscode,这是一个非常有用的扩展,可以即时检测重复。

          【讨论】:

            猜你喜欢
            • 2014-07-31
            • 2016-08-24
            • 2010-09-19
            • 1970-01-01
            • 2015-12-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多