java - 使用 Java 将嵌套 Map 保存并加载到文本文件中

标签 java text dictionary load save

我有一个嵌套的 map 。我想将这些 map 保存在一个文本文件中,然后在其他项目中使用该文件。我可以正确保存outerMap,但是我需要一个有效的代码来将此文件加载到同一个 map 中(我使用“#”来分隔outerMap 及其innerMap 的键)。

Map <String, Map <String,Double>> outerMap= new HashMap<>();
Map <String,Double> innerMap= new HashMap<>();
   .
   .
   .

PrintWriter writer = new PrintWriter("e:\\t.txt", "UTF-8");
Iterator it = outerMap.entrySet().iterator();
while (it.hasNext()) {
       Map.Entry pairs = (Map.Entry)it.next();
       writer.println(pairs.getKey() + "#" + pairs.getValue());
}
writer.close();

最佳答案

关于您在评论中提出的问题:

Gson gson = new Gson();

Map<String, Map<String, Double>> outerMap = new HashMap<>();

Map<String, Double> innerMap = new HashMap<>();
innerMap.put("1", 1.0);
innerMap.put("2", 2.0);

outerMap.put("key1", innerMap);

String json = gson.toJson(outerMap);

Path path = FileSystems.getDefault().getPath("", "myfile.txt");
Files.write(path, json.getBytes("UTF-8"), StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING);

json = new String(Files.readAllBytes(path));

outerMap = gson.fromJson(json, new TypeToken<Map<String, Map<String, Double>>>(){}.getType());

for (Map.Entry<String, Map<String, Double>> outerEntry: outerMap.entrySet()) {
    System.out.println(outerEntry.getKey());
    innerMap = outerEntry.getValue();

    for (Map.Entry<String, Double> innerEntry: innerMap.entrySet()) {
        System.out.println("    " + innerEntry.getKey() + "->" + innerEntry.getValue());
    }
}

输出:

key1 2->2.0 1->1.0

您需要使用Gson图书馆。

如果您不需要文本文件中的人类可读内容,您可以使用第一条评论中建议的方法:

Map<String, Map<String, Double>> outerMap = new HashMap<>();

Map<String, Double> innerMap = new HashMap<>();
innerMap.put("1", 1.0);
innerMap.put("2", 2.0);

outerMap.put("key1", innerMap);

// write to file

try (ObjectOutput objectOutputStream = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream("myfile2.txt", false)))) {
    objectOutputStream.writeObject(outerMap);
} catch (Throwable cause) {
    cause.printStackTrace();
}

// read from file

try (ObjectInput objectInputStream = new ObjectInputStream(new BufferedInputStream(new FileInputStream("myfile2.txt")))) {
    outerMap = (Map<String, Map<String, Double>>) objectInputStream.readObject();
} catch (Throwable cause) {
    cause.printStackTrace();
}

您将在“outerMap”引用中找到您的 map 。

关于java - 使用 Java 将嵌套 Map 保存并加载到文本文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27898303/

相关文章:

java - Android 编程中 fragment 、 Activity 和布局/菜单 XML 文件之间的关系是什么?

java - getClass().getResource在加载fxml文件中的作用是什么?

java - 使用php和java进行密码加密

php - 使用 PHP 创建文本文件?

Swift - 按键降序对字典进行排序

python - 快速加载和处理9000万个元素的字典

java - 检测数组列表中包含多个员工对象的重复电子邮件 ID

mysql - 为什么如果我创建一个 varchar(65535),我得到一个 mediumtext?

java - 从文本文件中删除重复行

dictionary - 条件 jsonpath 表达式在 groovy 脚本、jmeter 中不起作用