Javaはyamlプロファイルの読み取りを実現


よく使われるプロファイルはyaml、xml、properties、jsonなどがありますが、今日は主にyamlファイルの読み取りを記録したいと思います.くだらないことは言わないで、直接コードをつけます.
package com.ex.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.net.URL;
import java.util.Map;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.yaml.snakeyaml.Yaml;

public class YmlUtil {
	protected String yml = null;
	private Logger logger = LogManager.getLogger(YmlUtil.class);

	public YmlUtil(String yml) {
		this.yml = yml;
	}
	
	public Object getYml(String path) {

		Yaml yaml = new Yaml();
		URL url = YmlUtil.class.getClassLoader().getResource(yml);
		if (url != null) {
			Map map;
			try {
				map = (Map) yaml.load(new FileInputStream(url.getFile()));
				return getValue(map, path);
			} catch (FileNotFoundException e) {

				logger.info("can not find the yml file, please double check");
				return null;
			}

		} else {
			return null;
		}
	}

	@SuppressWarnings("rawtypes")
	public static Object getValue(Map map, String value) {
		String[] values = value.split("\\.");
		Map m = map;
		int len = values.length - 1;
		for (int i = 0; i < len; i++) {
			if (m.containsKey(values[i])) {
				m = (Map) m.get(values[i]);
			} else {
				return null;
			}
		}
		return m.get(values[len]);
	}

}

よくあるyamlは
server:localhost:8080/user
   f1:
       name:zhangsan
       age:18
   f2:
       name:lisi
       age:29
       orderList: apple, paper, car,glass
簡単な分析の下でコード:
  • まずsnakeyaml-1.15をインポートする必要があります.jarのjarパケットは、次にパラメータ付き構造関数を定義し、インスタンス化時に解析するプロファイルを
  • に渡す.
  • 次にyamlで指定するkeyに対応するvalueを取得する方法がある、yamlはいずれもkey-valueの形式であるため、プロファイルを多重mapに変換し、すべてのkeyを取得し、参照に基づいて対応するvalueを取得する必要がある.
  • getymlを使用してkeyに転送すればよい.取得したvalueがlistである場合、listで特殊文字で配列に分割することができ、その後、配列を操作することができる
  • .
    他のタイプのプロファイルは、全体的な考え方が同じであるため、一つ一つ説明しません.
    余談ですが、yamlにはkeyやvalueとしてはいけない文字がいくつか残っています.書くときは大丈夫かもしれませんが、ショートカットフォームを使うときは、あなたが維持している値が変更されます.うん、私はこの穴に落ちました.列に並んで穴に入ってほしいです.