我已经宣布了一张如下所示的地图,并用“价值”和“密钥”填充了这个地图。
Map<String,List<String>> cat = new HashMap<String,List<String>>();
我可以成功地将其写入这样的文件:
try{
File SubCats = new File("subcats.txt");
FileOutputStream fos=new FileOutputStream(SubCats);
PrintWriter pw = new PrintWriter(fos);
for(Map.Entry<String,List<String>> m :cat.entrySet()) {
pw.println(m.getKey()+"="+m.getValue());
}
pw.flush();
pw.close();
fos.close();
}
我现在的问题是如何从文件中将其重新读回地图。我尝试这样的事情,但不知道如何“放置&#39;价值和钥匙重新进入。
BufferedReader in = new BufferedReader(new FileReader("subcats.txt"));
String line = "";
while ((line = in.readLine()) != null) {
String parts[] = line.split("\t");
for(Map.Entry<String,List<String>> m :cat.entrySet()) {
(m.putKey(), m.putValue());
}
in.close();
}
THX。
答案 0 :(得分:0)
public Map<String, List<String>> readSubCats() throws IOException {
Map<String, List<String>> ret = new HashMap<String, List<String>>();
BufferedReader in = new BufferedReader(new FileReader("subcats.txt"));
String line = null;
while ((line = in.readLine()) != null) {
int i = line.indexOf("=");
// if i < 0 throw an Exception
ret.put(line.substring(0, i), Arrays.asList(line.substring(i + 2, line.length() - 1).split(",\\t")));
}
in.close();
return ret;
}
仅当您在列表中的字符串中没有\n
和\t
且密钥中没有=
时,此功能才有效,其他字符也可以。
注意split
需要正则表达式,正则表达式中的选项卡与Java \t
中的选项卡类似,但由于\
是Java中的转义字符,我们需要自行转义,这导致\\t
。如果要按\
拆分,则必须编写split("\\\\")
,因为\
也是正则表达式中的转义字符。