读取文件并获取key = value,而不使用java.util.Properties

Sam*_*ães 3 java file-io properties key-value-coding file-read

我正在构建一个RMI游戏,客户端将加载一个文件,其中包含一些键和值,这些键和值将用于几个不同的对象.这是一个保存游戏文件,但我不能使用java.util.Properties(它在规范下).我必须读取整个文件并忽略注释行和在某些类中不相关的键.这些属性是唯一的,但可以按任何顺序排序.我的文件当前文件如下所示:

# Bio
playerOrigin=Newlands
playerClass=Warlock
# Armor
playerHelmet=empty
playerUpperArmor=armor900
playerBottomArmor=armor457
playerBoots=boot109
etc
Run Code Online (Sandbox Code Playgroud)

这些属性将根据播放器的进度进行编写和放置,文件读取器必须到达文件末尾并仅获取匹配的键.我尝试了不同的方法,但到目前为止,没有什么能与我使用java.util.Properties的结果接近.任何的想法?

jmq*_*jmq 5

这将逐行读取"属性"文件并解析每个输入行并将值放在键/值映射中.地图中的每个键都是唯一的(不允许使用重复键).

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

{playerBoots=boot109, playerBottomArmor=armor457, playerClass=Warlock, playerHelmet=empty, playerOrigin=Newlands, playerUpperArmor=armor900}
Run Code Online (Sandbox Code Playgroud)

您可以使用访问地图的每个元素map.get("key string");.

编辑:此代码不检查格式错误或缺少"="字符串.您可以通过检查对数组的大小来自行添加它.