我正在构建一个 RMI 游戏,客户端将加载一个包含一些键和值的文件,这些键和值将用于多个不同的对象。它是一个保存游戏文件,但我不能为此使用 java.util.Properties (它符合规范)。我必须读取整个文件并忽略注释行和与某些类不相关的键。这些属性是唯一的,但它们可以按任何顺序排序。我的文件当前文件如下所示:
# Bio
playerOrigin=Newlands
playerClass=Warlock
# Armor
playerHelmet=empty
playerUpperArmor=armor900
playerBottomArmor=armor457
playerBoots=boot109
etc
这些属性将根据玩家的进度写入和放置,文件读取器必须到达文件末尾并仅获取匹配的键。我尝试了不同的方法,但到目前为止,没有任何方法可以接近我使用 java.util.Properties 得到的结果。任何想法?
这将逐行读取“属性”文件并解析每个输入行并将值放入键/值映射中。映射中的每个键都是唯一的(不允许有重复的键)。
package samples;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.TreeMap;
public class ReadProperties {
public static void main(String[] args) {
try {
TreeMap<String, String> map = getProperties("./sample.properties");
System.out.println(map);
}
catch (IOException e) {
// error using the file
}
}
public static TreeMap<String, String> getProperties(String infile) throws IOException {
final int lhs = 0;
final int rhs = 1;
TreeMap<String, String> map = new TreeMap<String, String>();
BufferedReader bfr = new BufferedReader(new FileReader(new File(infile)));
String line;
while ((line = bfr.readLine()) != null) {
if (!line.startsWith("#") && !line.isEmpty()) {
String[] pair = line.trim().split("=");
map.put(pair[lhs].trim(), pair[rhs].trim());
}
}
bfr.close();
return(map);
}
}
输出看起来像:
{playerBoots=boot109, playerBottomArmor=armor457, playerClass=Warlock, playerHelmet=empty, playerOrigin=Newlands, playerUpperArmor=armor900}
您可以使用以下命令访问地图的每个元素map.get("key string");
.
EDIT:此代码不会检查格式错误或丢失的“=”字符串。您可以通过检查对数组的大小在 split 返回时自行添加该内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)