How to read/write YAML file in java

There are number of parser libraries available to parse

  • Jackson
  • SnakeYAML library

In this post, Will take you an example for read and write yaml file using jackson-dataformat-yaml - Jackson library. Jackson is a popular library in java used to convert json/xml to/from java object.

Sample Yaml file example

yaml is superset of json. It contains key and value pairs with included indentation and tabs.

Given the yaml example file with database dictionary details.

--- # Application configuration - application.yaml
author: Franc
database:
        driver: com.mysql.jdbc.Driver
        port: 3306
        dbname: mydb
        username: root
        password: 

Add Jackson dependency to maven

Add the following dependencies in pom.xml for maven related projects

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
    <version>2.10.3</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.3</version>
</dependency>

add the following dependencies are added to projects using gradle build tool.

compile group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', 
version: '2.10.3'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', 
version: '2.10.3'

jackson-databind is an library for data binding core API which every format implementation library extends - jackson-dataformat-yaml.

Parse/Read yaml file into object in java

Create a basic objects with setter and getter as follows

package org.w3schools.io.yaml;
public class ApplicationConfig {
	public ApplicationConfig() {
	}
	private String author;
	private DatabaseConfig database;
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public DatabaseConfig getDatabase() {
		return database;
	}
	public void setDatabase(DatabaseConfig database) {
		this.database = database;
	}
	@Override
	public String toString() {
		return "\nAuthor: " + author 
        + "\ndatabase: " + database + "\n";
	}
}

POJO object declared for database dictionary with setter and getters

package org.w3schools.io.yaml;
public class DatabaseConfig {
	private String driver;
	private Integer port;
	private String dbname;
	private String username;
	private String password;
	public String getDriver() {
		return driver;
	}
	public void setDriver(String driver) {
		this.driver = driver;
	}
	public Integer getPort() {
		return port;
	}
	public void setPort(Integer port) {
		this.port = port;
	}
	public String getDbname() {
		return dbname;
	}
	public void setDbname(String dbname) {
		this.dbname = dbname;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "\nDriver: " + driver + "\nport: " 
        + port + "\ndbname: " + dbname 
        + "\nusername: " + username
		+ "\npassword: " + password + "\n";
	}

}
package org.w3schools.io.yaml;
import java.io.File;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
public class YamlReaderExample {
	public static void main(String[] args) throws Exception {
		File file = new File("src/main/resources/application.yaml");
		ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
		ApplicationConfig config = objectMapper.readValue(file, ApplicationConfig.class);
		System.out.println("Application config info " + config.toString());
	}
}

Write Object to YAML

Data is in java pojo object, Create a object mapper with yaml implementation class - YAMLFactory writeValue method creates yaml file using pojo object.

Finally pojo data is serialized into YAML format.

package org.w3schools.io.yaml;

import java.io.File;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
public class YamlReaderExample {
	public static void main(String[] args) throws Exception {
		DatabaseConfig dbconfig = new DatabaseConfig();
		dbconfig.setDbname("newdb");
		dbconfig.setDriver("newdriver");
		dbconfig.setPort(6601);
		dbconfig.setUsername("appuser");
		dbconfig.setPassword("apppassword");
		ApplicationConfig appConfig = new ApplicationConfig();
		appConfig.setAuthor("Tom");
		appConfig.setDatabase(dbconfig);
		ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
		objectMapper.writeValue(new File("src/main/resources/application1.yaml"), appConfig);
	}
}

And the application1.yaml file created with below content —yaml author: “Tom” database: driver: “newdriver” port: 6601 dbname: “newdb” username: “appuser” password: “apppassword”