将地图条目存储在文件中并将其读回

时间:2015-05-20 20:16:35

标签: java dictionary file-io hashmap bufferedreader

我已经宣布了一张如下所示的地图,并用“价值”和“密钥”填充了这个地图。

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。

1 个答案:

答案 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("\\\\"),因为\也是正则表达式中的转义字符。