yaml文件的读取以及其工具类

由于在工作中会出现一系列以键值对形式选项参数对应,可以通过yaml文件进行读取文件流。

type.yml

#计划审核表-查询类型
TCX_JHSBB_AUDIT_searchSblx:
  - valueData: 1
    displayName: 待审核
  - valueData: 2
    displayName: 已审核

YamlUtil

package com.yufei.core.util.conf;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.yaml.snakeyaml.Yaml;

import com.yufei.core.entity.SelectModel;
import com.yufei.core.util.PathUtil;

/**
 * type.yml 配置文件对应下拉集合显示
 * @author Lenovo
 */
public class YamlUtil {
	
	
	// 计划审核表-查询类型(计划审核、配合审核)
	public static final String TCX_JHSBB_AUDIT_SEARCHSBLX = "TCX_JHSBB_AUDIT_searchSblx"; // 查询类型
	
	
	/**
	 * 读取下拉状态配置参数List
	 * @param typeName
	 * @return
	 * @throws IOException
	 * @throws IllegalAccessException 
	 * @throws IllegalArgumentException 
	 */
	public static List<SelectModel> getTypePropertie(String typeName) throws IOException{
		String yamlPath = PathUtil.getClassResources() + "conf/type.yml"; // yaml路径
		File yamlFile = new File(yamlPath);
		Yaml yaml = new Yaml();
		HashMap map = yaml.loadAs(new FileInputStream(yamlFile), HashMap.class);
		
		List<SelectModel> list = new ArrayList<SelectModel>();
		List contentList = (List)map.get(typeName);
		for (Object item : contentList){
			list.add(new SelectModel(((HashMap)item).get("valueData").toString(), ((HashMap)item).get("displayName").toString()));
		}
		return list;
	}
	
	/**
	 * 读取下拉状态配置参数返回map
	 * @param typeName
	 * @return
	 * @throws IOException
	 */
	public static Map<String,Object> getTypePropertieMap(String typeName) throws IOException{
		String yamlPath = PathUtil.getClassResources() + "conf/type.yml"; // yaml路径
		File yamlFile = new File(yamlPath);
		Yaml yaml = new Yaml();
		HashMap hashMap = yaml.loadAs(new FileInputStream(yamlFile), HashMap.class);
		
		Map<String,Object> map = new HashMap<String,Object>();
		List contentList = (List)hashMap.get(typeName);
		for (Object item : contentList){
			map.put(((HashMap)item).get("valueData").toString(), ((HashMap)item).get("displayName").toString());
		}
		return map;
	}
}

注意:这里需要导入一个包,可以在Maven中引入

	<dependency>
		    <groupId>org.yaml</groupId>
		    <artifactId>snakeyaml</artifactId>
		    <version>1.17</version>
		</dependency>

上面中还引入了一个PathUtil的路径工具类

package com.yufei.core.util;

import java.io.File;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

/**
 * 路径工具类
 * 
 * @author
 * 
 */
public class PathUtil {

	/**
	 * 图片访问路径
	 * 
	 * @param pathType
	 *            图片类型 visit-访问;save-保存
	 * @param pathCategory
	 *            图片类别,如:话题图片-topic、话题回复图片-reply、商家图片
	 * @return
	 */
	public static String getPicturePath(String pathType, String pathCategory) {
		String strResult = "";
		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
				.getRequestAttributes()).getRequest();
		StringBuffer strBuf = new StringBuffer();
		if ("visit".equals(pathType)) {
		} else if ("save".equals(pathType)) {
			String projectPath = PublicUtil.getPorjectPath().replaceAll("\\\\",
					"/");
			projectPath = splitString(projectPath, "bin/");

			strBuf.append(projectPath);
			strBuf.append("webapps/ROOT/");
		}

		strResult = strBuf.toString();

		return strResult;
	}

	private static String splitString(String str, String param) {
		String result = str;

		if (str.contains(param)) {
			int start = str.indexOf(param);
			result = str.substring(0, start);
		}

		return result;
	}
	
	/*
	 * 获取classpath1
	 */
	public static String getClasspath(){
		String path = (String.valueOf(Thread.currentThread().getContextClassLoader().getResource(""))+"../../").replaceAll("file:/", "").replaceAll("%20", " ").trim();	
		if(path.indexOf(":") != 1){
			path = File.separator + path;
		}
		return path;
	}
	
	/*
	 * 获取classpath2
	 */
	public static String getClassResources(){
		String path =  (String.valueOf(Thread.currentThread().getContextClassLoader().getResource(""))).replaceAll("file:/", "").replaceAll("%20", " ").trim();	
		if(path.indexOf(":") != 1){
			path = File.separator + path;
		}
		return path;
	}
	
	public static String PathAddress() {
		String strResult = "";

		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder
				.getRequestAttributes()).getRequest();

		StringBuffer strBuf = new StringBuffer();

		strBuf.append(request.getScheme() + "://");
		strBuf.append(request.getServerName() + ":");
		strBuf.append(request.getServerPort() + "");

		strBuf.append(request.getContextPath() + "/");

		strResult = strBuf.toString();// +"ss/";//加入项目的名称

		return strResult;
	}
	
	
}

SelectModel

package com.yufei.core.entity;


/**
 * 下拉绑定对象
 * @author zhanghd 2017-07-27
 *
 */
public class SelectModel {
	public SelectModel() {
		super();
	}
	
	public SelectModel(String valueData, String displayName) {
		super();
		this.valueData = valueData;
		this.displayName = displayName;
	}

	/**
	 * 下拉值
	 */
	private String valueData;
	/**
	 * 下拉显示内容
	 */
	private String displayName;

	public String getValueData() {
		return valueData;
	}

	public void setValueData(String valueData) {
		this.valueData = valueData;
	}

	public String getDisplayName() {
		return displayName;
	}

	public void setDisplayName(String displayName) {
		this.displayName = displayName;
	}
}

注意:在测试过程中,报了一个Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1

原因,type.yml中的指定配置文件编码不是UTF-8的,转换成UTF-8就行了。

 

### 回答1: Java YAML工具类是一种用于处理YAML格式文件工具类,可以方便地读取、写入和操作YAML文件。 Java中有许多开源的第三方库可以用来处理YAML文件,比如SnakeYAML、Jackson、YAMLBeans等。这些库提供了完整的API和功能,可以帮助开发人员处理YAML文件的各种操作。 使用Java YAML工具类,我们可以通过简单的代码实现读取YAML文件的功能。通过调用相应的方法,我们可以将YAML文件的内容读取到一个Java对象中,然后进行相应的操作和处理。同时,我们也可以将Java对象以YAML格式写入到文件中,或者将Java对象转换为YAML字符串进行传输或存储。 Java YAML工具类还提供了更高级的功能,比如支持对象的序列化和反序列化、自定义类型映射、错误处理等。我们可以通过配置相应的参数和监听器来实现这些功能。 总之,Java YAML工具类可以方便地处理YAML格式文件,在Java应用中起到了重要的作用。无论是读取配置文件、解析数据文件还是进行数据交换,Java YAML工具类都是一个很好的选择。 ### 回答2: Java开发中,YAMLYAML Ain't Markup Language)是一种轻量级的数据序列化格式,与JSON和XML类似,但更加直观和易读。为了在Java中处理YAML格式的数据,可以使用Java YAML工具类。 Java YAML工具类是一个用于读取和写入YAML文件工具类。它提供了简单易用的API,使得在Java程序中处理YAML数据变得非常方便。 对于读取YAML文件,Java YAML工具类通常提供了以下几个步骤: 1. 创建一个YAML Parser对象,用于解析YAML文件。 2. 使用YAML Parser对象的API读取YAML文件的内容。通过提供文件路径或输入流,可以将YAML文件解析成Java对象。 3. 将解析后的Java对象用于后续的数据处理。 对于写入YAML文件,Java YAML工具类可以使用以下步骤: 1. 创建一个YAML Writer对象,用于将数据写入YAML文件。 2. 使用YAML Writer对象的API将Java对象转换为YAML格式的字符串。 3. 将YAML格式的字符串写入目标文件。 Java YAML工具类通常提供了丰富的API,可以处理各种类型的数据,包括基本数据类型、对象、集合等。它还支持注释、多文档以及一些高级特性,如引用和锚点。 Java YAML工具类的使用可以大大简化YAML数据的处理过程,提高开发效率。同时,它还能够保持YAML数据的格式和结构,使得程序的逻辑更加清晰易读。 综上所述,Java YAML工具类是一种用于读取和写入YAML文件工具类,通过简单易用的API,可以在Java程序中方便地处理YAML格式的数据。它能够保持YAML数据的格式和结构,提高开发效率和代码可读性。 ### 回答3: Java中的YAML工具类是一种用于读取和写入YAML文件工具YAMLYAML Ain't Markup Language)是一种人类可读的数据序列化格式,与JSON类似,但更易于阅读和编辑。 使用Java的YAML工具类,我们可以轻松地读取YAML文件并将其转换为Java对象,或者将Java对象转换为YAML格式。 在使用YAML工具类之前,我们需要引入相应的依赖库。常见的Java YAML库有SnakeYAML和Jackson YAML等。 例如,使用SnakeYAML库,可以使用以下代码读取YAML文件并转换为Java对象: ```java import org.yaml.snakeyaml.Yaml; import java.io.FileInputStream; public class Main { public static void main(String[] args) throws Exception { // 读取YAML文件 Yaml yaml = new Yaml(); FileInputStream inputStream = new FileInputStream("data.yaml"); Object data = yaml.load(inputStream); // 将YAML数据转换为Java对象 MyClass myObject = (MyClass) data; // 使用Java对象 System.out.println(myObject.getName()); } } class MyClass { private String name; // getter和setter方法 } ``` 上述代码首先创建了一个Yaml对象,然后通过FileInputStream读取了名为"data.yaml"的YAML文件load方法将YAML数据加载到一个Java对象中,然后我们可以使用这个Java对象。 此外,我们还可以将Java对象转换为YAML格式并写入YAML文件。例如,使用上述的MyClass对象,可以使用以下代码将其转换为YAML格式并写入文件: ```java import org.yaml.snakeyaml.Yaml; import java.io.FileWriter; public class Main { public static void main(String[] args) throws Exception { // 创建Java对象 MyClass myObject = new MyClass(); myObject.setName("John"); // 将Java对象转换为YAML Yaml yaml = new Yaml(); String output = yaml.dump(myObject); // 将YAML写入文件 FileWriter writer = new FileWriter("output.yaml"); writer.write(output); writer.close(); } } class MyClass { private String name; // getter和setter方法 } ``` 上述代码将创建一个名为"John"的MyClass对象,并将其转换为YAML格式。然后,通过FileWriter将YAML数据写入名为"output.yaml"的文件中。 总之,Java的YAML工具类使我们能够轻松地读取和写入YAML文件,以及将YAML数据转换为Java对象和反之。这为处理YAML格式的数据提供了便利和灵活性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值