用于在属性文件中查找重复键和值的工具

时间:2009-11-22 16:34:21

标签: java java-ee internationalization

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

7 个答案:

答案 0 :(得分:4)

/**
 *  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);
   }
}

答案 1 :(得分:3)

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

http://rscbundlecheck.sourceforge.net/

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

答案 2 :(得分:1)

我不知道是否有现有工具,但您应该能够编写一个简短的java程序,或者用您熟悉的语言编写脚本,以便立即执行此操作。然后你也可以将它用于将来使用。

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

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

答案 3 :(得分:1)

在Netbeans上有一个sort line tools插件,可以选择删除重复项。如果属性是一个内衬,则可以完美地工作。

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

Eclipse有一个ResourceBundle Editor插件,用于管理属性文件:

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

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

答案 6 :(得分:0)

我使用了两个不错的工具

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

    npm命令安装软件包:npm i unival

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

  2. unival 扩展名:如果您使用vscode,这对动态检测重复项非常有用。