在groovy中创建地图

时间:2017-11-24 08:48:48

标签: java groovy

我有以下文件:

name = David 
city = sydney
COuntry = Australia

我正在尝试使用groovy创建一个哈希映射并将其拆分为=并将其存储在一个数组中,使得part[0]包含在相等之前,而part[1]包含在相等之后。我正在尝试在这里创建一个地图。

期望的输出:

def mapedData = [name :david , city : sydney , country :australia ]

我的尝试:

String s=""
def myfile = new File("C:/Users/.............")
BufferedReader br = new BufferedReader(new FileReader(myfile));

Map<String, String> map = new HashMap<String, String>();
while((s = br.readLine()) != null) {
    if(!s.startsWith("#")) {
        StringTokenizer st=new StringTokenizer(s, "=")
            while(st.hasMoreElements()) {
                String line=st.nextElement().toString().trim()
                print line
            }
        }
    }
}

3 个答案:

答案 0 :(得分:4)

如果要从Groovy中的文件创建地图,可以使用java.util.Properties。这是一个例子:

def file = new File("C:\\stackoverflow\\props.properties")
def props = new Properties()
file.withInputStream { stream ->
    props.load(stream)
}
println(props)

打印出来:

[key1:value1, key2:value2]

props.properties文件包含:

# Stackoverflow test
key1 = value1
key2 = value2

答案 1 :(得分:1)

尝试使用此代码:

def map =[:]
new File("file.txt").eachLine{line->
if(line.contains('=')&& (!line.startsWith("#"))){        
    map[line.split('=')[0]]=line.split('=')[1]
    }
}
println map

答案 2 :(得分:0)

这里有一个符合你想要的单线:

new File(/C:\Users\.............\input.txt/).readLines().collectEntries { it.trim().split(/\s*=\s*/) as List }