我有以下文件:
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
}
}
}
}
答案 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 }