2012-07-10 57 views
0

将下列业务规则存储在文件中的最佳方式是什么,以便可以将它们应用于输入值,这些值将是密钥?Java - 关键值决策

Key-INDIA; Value-Delhi. 
Key-Australia; Value-Canberra. 
Key-Germany, Value-Berlin. 

一个解决方案: - 的Xml

<Countries> 
    <India>Delhi</India> 
    <Australia>Canberra</Australia> 
    <Germany>Berlin</Germany> 
</Countries> 

作为规则数将是“1000;使用Map来实现它是不可能的。

Regards, Shreyas。

+2

使用.properties文件并将它们存储在键值对中。 – vikiiii 2012-07-10 11:18:53

+0

使用如下建议的属性是好的。但与您自己的评论相反 - 您将使用Map在内存中访问它(例如java.util.HashMap)。 – Christian 2012-07-10 11:24:11

回答

2

使用java.util.Properties写,读,从文件:

Properties p = new Properties(); 
p.setProperty("Australia", "Canberra"); 
p.setProperty("Germany", "Berlin"); 

File f = new File("my.properties"); 
FileOutputStream fos = new FileOutputStream(f); 
p.store(fos, "my properties"); 

使用p.load()从文件中读取他们回来,p.getProperty()查询他们一旦加载。

+0

Downvoter请解释一下吗? – hmjd 2012-07-11 05:51:36

3

使用.properties文件并将它们存储在键值对中。

India=Delhi. 
Australia=Canberra. 
Germany=Berlin. 

并使用java.util.Properties来读取该文件,如hmjd所述。

例如:

 Properties prop = new Properties();  
     try { 
       //load a properties file 
      prop.load(new FileInputStream("countries.properties")); 

       //get the property value and print it out 
       System.out.println(prop.getProperty("India")); 
      System.out.println(prop.getProperty("Australia")); 
      System.out.println(prop.getProperty("Germany")); 

     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
0

创建一个属性文件(如file.properties):

INDIA=Delhi. 
Australia=Canberra. 
Germany=Berlin. 

然后在代码:

public static void main(String[] args) { 
      Properties prop = new Properties(); 
      try { 
        prop.load(new FileInputStream("file.properties")); 
        String value= prop.getProperty("INDIA"); 
        ... 

      } catch (Exception e) { 
      } 
    } 
0

你有没有看Spring configuration?这样你就可以/在每个密钥的config和store对象定义中创建一个映射。例如

<map> 
     <entry key="India" value="Delhi"> 
    </map> 

你在谈论业务规则,但目前你只是简单地存储一个键/值对。如果这些规则变得更复杂,那么一个简单的键/值对就不足够了。因此,也许你需要的东西,如:

Map<String, Country> 
在你的代码

,和国家是(现在)一个省会城市的目标,但在未来它将包含(说)的位置,或国际电话号码前缀,或税收规则等在春天它会类似于:

<map> 
     <entry key="India" ref="india"/> 
    </map> 

    <!-- create a subclass of Country --> 
    <bean id="india" class="com.example.India"> 

我意识到这是比这里的其他建议复杂得多。然而,既然你在谈论规则,我怀疑你会想要配置/定义某种行为。您可以使用属性(或类似属性)来完成此操作,但可能最终会针对规则的不同行为方面设置不同的属性集。这迅速成为真正的维修噩梦。

+0

我授予你这是一个更加强制的解决方案。然而(正如我强调的那样),他需要定义业务规则,并且只能在属性文件中指定最简单的业务规则。 – 2012-07-10 14:59:08