有效地存储和查阅字符串列表

时间:2017-10-30 14:24:10

标签: java linux string file

我有这样的事情:

  • category1:foo,bar,...
  • category2:baz,qux,...
  • ...

在我的代码中的某个时刻,我必须尽快检索项目所属的类别(例如:查找" category1"来自" foo")。

我必须决定如何以允许我尽快识别类别的方式存储这些列表(我可以自由选择我想要的任何数据结构)。

它不会经常发生,但我之后也必须能够更新此列表(直接编辑文件或使用shell脚本或其他任何内容,它们将独立于当前可执行文件)。

为了将这些列表存储在外部文件中,最适合我的需求是什么?

2 个答案:

答案 0 :(得分:1)

要查找项目属于哪个类别:使用HashMap<String, String>,其中键是项目,值是其类别。

要将HashMap存储到文件中并将其读回,请考虑HashMap实施Serializable,请参阅here

答案 1 :(得分:1)

使用java.util.Properties可以轻松地将地图存储在文件中,其中项目为关键,类别为属性。

java.util.Propertiesjava.util.Hashtable的扩展,与java.util.HashMap非常相似。

因此,您可以使用与以下示例类似的代码,将项目 - 类别地图序列化到属性文件中,并从文件中读取它:

Properties properties = new Properties();
properties.setProperty("foo", "cat1");
properties.setProperty("ba", "cat1");
properties.setProperty("fooz", "cat2");
properties.setProperty("baz", "cat2");
File storage = new File("index.properties");
// write to file
try(BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(storage), "UTF-8"))) {
    properties.store(writer, "index");
}

// Read from file
Properties readProps = new Properties();
try(BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(storage), "UTF-8"))) {
    readProps.load(reader);
}

if(!readProps.equals(properties)) {
    throw  new IllegalStateException("Written and read properties do not match");
}

System.out.println(readProps.getProperty("foo"));
System.out.println(readProps.getProperty("fooz"));

如果您运行代码,它将打印出来:

cat1
cat2

如果编辑创建的index.properties文件,则会看到以下内容:

#index
#Mon Oct 30 15:41:35 GMT 2017
fooz=cat2
foo=cat1
baz=cat2
ba=cat1