2013-05-02 51 views
11

我想使用Properties类填充HashMap。我想加载.propeties文件中的条目,然后将其复制到HashMap使用属性文件中的条目填充HashMap

此前,我曾用属性文件初始化HashMap,但现在我已经定义了HashMap并且只想在构造函数中初始化它。

此前的做法:

Properties properties = new Properties(); 
try { 
properties.load(ClassName.class.getResourceAsStream("resume.properties")); 
} 
catch (Exception e) { 
} 
HashMap<String, String> mymap= new HashMap<String, String>((Map) properties); 

但现在,我有这个

public class ClassName { 
HashMap<String,Integer> mymap = new HashMap<String, Integer>(); 

public ClassName(){ 

    Properties properties = new Properties(); 
    try { 
     properties.load(ClassName.class.getResourceAsStream("resume.properties")); 
    } 
    catch (Exception e) { 

    } 
    mymap = properties; 
    //The above line gives error 
} 
} 

如何分配对象的属性到这里HashMap

回答

20

如果我理解正确,属性中的每个值都是一个表示整数的字符串。因此,代码是这样的:

for (String key : properties.stringPropertyNames()) { 
    String value = properties.getProperty(key); 
    mymap.put(key, Integer.valueOf(value)); 
} 
+3

如果你使用的getResourceAsStream当越来越**空* *,这可能是因为你正在寻找类路径之外的文件。因此,要读取绝对文件路径,您可以执行:\t \t'File file = new File(“absolute/file/path/resume.properties”); \t \t \t FileInputStream fileInputStream = new FileInputStream(file); \t \t \t properties.load(fileInputStream); \t \t \t fileInputStream.close();' – 2015-01-12 09:40:31

14

使用.entrySet()

for (Entry<Object, Object> entry : properties.entrySet()) { 
    map.put((String) entry.getKey(), (String) entry.getValue()); 
} 
1
public static Map<String,String> getProperty() 
    { 
     Properties prop = new Properties(); 
     Map<String,String>map = new HashMap<String,String>(); 
     try 
     { 
      FileInputStream inputStream = new FileInputStream(Constants.PROPERTIESPATH); 
      prop.load(inputStream); 
     } 
     catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println("Some issue finding or loading file....!!! " + e.getMessage()); 

     } 
     for (final Entry<Object, Object> entry : prop.entrySet()) { 
      map.put((String) entry.getKey(), (String) entry.getValue()); 
     } 
     return map; 
    } 
+0

你能提供一些解释吗? – Cherniv 2017-01-02 18:35:34

+0

什么是只读属性文件填写与键和值的地图。 GetProperty()只是返回带有键和值的Map。你可以像getProperty()一样简单地访问该值。get(“key”) – 2017-01-26 08:40:40

2

的Java 8风格:

Properties properties = new Properties(); 
// add some properties here 
Map<String, String> map = new HashMap(); 

map.putAll(properties.entrySet().stream() 
        .collect(Collectors.toMap(e -> e.getKey().toString(), e -> e.getValue().toString())));