0

我尝试ListMultimap使用 写入文件Properties,但似乎不可能,请参阅使用 Properties 将 ListMultimap 写入文件的问题。

继续,如果使用Properties存储ListMultimap方式不正确,我们如何存储ListMultimap到文件中?我们如何从文件中读回?

例如,假设我有:

ListMultimap<Object, Object> index = ArrayListMultimap.create();

如何编写方法将其写入ListMultimap文件并从文件中读取:

writeToFile(ListMultimap multiMap, String filePath){
    //??
}

ListMultimap readFromFile(String filePath){
    ListMultimap multiMap;
    //multiMap = read from file
    return multiMap;
}
4

1 回答 1

2

您需要决定如何表示文件中的每个对象。例如,如果您ListMultimap包含String的 s 您可以简单地编写字符串值,但如果您正在处理复杂的对象,则需要将这些对象的表示形式生成为 a byte[],如果您想使用它Properties应该是 Base64 编码的。

基本的读取方法应该是这样的:

public ListMultimap<Object, Object> read(InputStream in) throws IOException
{
  ListMultimap<Object, Object> index = ArrayListMultimap.create();

  Properties properties = new Properties();
  properties.load(in);

  for (Object serializedKey : properties.keySet())  
  {
    String deserializedKey = deserialize(serializedKey);
    String values = properties.get(serializedKey);

    for (String value : values.split(",")) 
    {
      index.put(deserializedKey, deserialize(value)); 
    }
  }

  return index;
}

而写方法是这样的:

public void write(ListMultimap<Object, Object> index, OutputStream out) throws IOException
{
  Properties properties = new Properties();

  for (Object key : index.keySet())
  {
    StringBuilder values = new StringBuilder();

    for (Object value = index.get(key))
    {
      values.append(serailize(value)).append(",");
    } 

    properties.setProperty(serailize(key), values.subString(0, values.length - 1));
  }

  properties.store(out, "saving");
}

此示例使用您需要根据您的要求定义的方法,但签名是serializedeserialize

public String serialize(Object object)

public Object deserialize(String s)
于 2013-07-17T15:13:36.477 回答