我有这样的事情:
在我的代码中的某个时刻,我必须尽快检索项目所属的类别(例如:查找" category1"来自" foo")。
我必须决定如何以允许我尽快识别类别的方式存储这些列表(我可以自由选择我想要的任何数据结构)。
它不会经常发生,但我之后也必须能够更新此列表(直接编辑文件或使用shell脚本或其他任何内容,它们将独立于当前可执行文件)。
为了将这些列表存储在外部文件中,最适合我的需求是什么?
答案 0 :(得分:1)
要查找项目属于哪个类别:使用HashMap<String, String>
,其中键是项目,值是其类别。
要将HashMap
存储到文件中并将其读回,请考虑HashMap
实施Serializable
,请参阅here。
答案 1 :(得分:1)
使用java.util.Properties
可以轻松地将地图存储在文件中,其中项目为关键,类别为属性。
java.util.Properties
是java.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