这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions libraries-files/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>libraries-files</artifactId>

<parent>
<artifactId>parent-modules</artifactId>
<groupId>com.baeldung</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>

<dependencies>
<dependency>
<groupId>org.ini4j</groupId>
<artifactId>ini4j</artifactId>
<version>${org.ini4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-configuration2</artifactId>
<version>${commons-configuration2}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>

<properties>
<org.ini4j.version>0.5.4</org.ini4j.version>
<commons-configuration2>2.8.0</commons-configuration2>
<jackson.version>2.13.1</jackson.version>
</properties>

</project>
45 changes: 45 additions & 0 deletions libraries-files/src/main/java/com/baeldung/ini/CommonsParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.baeldung.ini;

import org.apache.commons.configuration2.INIConfiguration;
import org.apache.commons.configuration2.SubnodeConfiguration;
import org.apache.commons.configuration2.ex.ConfigurationException;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

public class CommonsParser {
public static Map<String, Map<String, String>> parseIniFile(File fileToParse) throws IOException, ConfigurationException {
Map<String, Map<String, String>> iniFileContents = new HashMap<>();

INIConfiguration iniConfiguration = new INIConfiguration();
try (FileReader fileReader = new FileReader(fileToParse)) {
iniConfiguration.read(fileReader);
}

for (String section : iniConfiguration.getSections()) {
Map<String, String> subSectionMap = new HashMap<>();
SubnodeConfiguration confSection = iniConfiguration.getSection(section);
Iterator<String> keyIterator = confSection.getKeys();
while (keyIterator.hasNext()) {
String key = keyIterator.next();
String value = confSection.getProperty(key)
.toString();
subSectionMap.put(key, value);
}
iniFileContents.put(section, subSectionMap);
}
return iniFileContents;
}

public static String readIniFileValue(File fileToParse, String section, String value) throws IOException, ConfigurationException {
INIConfiguration iniConfiguration = new INIConfiguration();
try (FileReader fileReader = new FileReader(fileToParse)) {
iniConfiguration.read(fileReader);
}

return iniConfiguration.getSection(section).getProperty(value).toString();
}
}
23 changes: 23 additions & 0 deletions libraries-files/src/main/java/com/baeldung/ini/Ini4JParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.baeldung.ini;

import org.ini4j.Ini;

import java.io.File;
import java.io.IOException;
import java.util.*;

import static java.util.stream.Collectors.toMap;

public class Ini4JParser {

public static Map<String, Map<String, String>> parseIniFile(File fileToParse) throws IOException {
Ini ini = new Ini(fileToParse);
return ini.entrySet().stream()
.collect(toMap(Map.Entry::getKey, Map.Entry::getValue));
}

public static String readIniFileValue(File fileToParse, String section, String key) throws IOException {
Ini ini = new Ini(fileToParse);
return ini.get(section, key);
}
}
109 changes: 109 additions & 0 deletions libraries-files/src/main/java/com/baeldung/ini/MyConfiguration.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
package com.baeldung.ini;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;

public class MyConfiguration {

@JsonNaming(PropertyNamingStrategies.KebabCaseStrategy.class)
public static class Fonts {
private String letter;
private int textSize;

public String getLetter() {
return letter;
}

public void setLetter(String letter) {
this.letter = letter;
}

public int getTextSize() {
return textSize;
}

public void setTextSize(int textSize) {
this.textSize = textSize;
}
}

public static class Background {
private String color;

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}
}

@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
public static class RequestResult {
private int requestCode;

public int getRequestCode() {
return requestCode;
}

public void setRequestCode(int requestCode) {
this.requestCode = requestCode;
}
}

@JsonNaming(PropertyNamingStrategies.UpperCamelCaseStrategy.class)
public static class ResponseResult {
private int resultCode;

public int getResultCode() {
return resultCode;
}

public void setResultCode(int resultCode) {
this.resultCode = resultCode;
}
}

private Fonts fonts;
private Background background;

@JsonProperty("RequestResult")
private RequestResult requestResult;

@JsonProperty("ResponseResult")
private ResponseResult responseResult;

public Fonts getFonts() {
return fonts;
}

public void setFonts(Fonts fonts) {
this.fonts = fonts;
}

public Background getBackground() {
return background;
}

public void setBackground(Background background) {
this.background = background;
}

public RequestResult getRequestResult() {
return requestResult;
}

public void setRequestResult(RequestResult requestResult) {
this.requestResult = requestResult;
}

public ResponseResult getResponseResult() {
return responseResult;
}

public void setResponseResult(ResponseResult responseResult) {
this.responseResult = responseResult;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.baeldung.ini;

import org.junit.jupiter.api.Test;

import java.io.File;
import java.nio.file.Paths;
import java.util.Map;

import static com.baeldung.ini.CommonsParser.parseIniFile;
import static com.baeldung.ini.CommonsParser.readIniFileValue;
import static org.assertj.core.api.Assertions.assertThat;

class CommonsParserUnitTest {

private static final File TEST_FILE = Paths.get("src", "test", "resources", "sample.ini").toFile();

@Test
void givenIniFileThenCanParseWithIni4j() throws Exception {
Map<String, Map<String, String>> result =
parseIniFile(TEST_FILE);

assertThat(result.get("fonts"))
.containsEntry("letter", "bold")
.containsEntry("text-size", "28");
}

@Test
void givenIniFileThenCanReadKeyWithIni4j() throws Exception {
assertThat(readIniFileValue(TEST_FILE, "fonts", "letter"))
.isEqualTo("bold");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package com.baeldung.ini;

import org.junit.jupiter.api.Test;

import java.io.File;
import java.nio.file.Paths;
import java.util.Map;

import static com.baeldung.ini.Ini4JParser.readIniFileValue;
import static com.baeldung.ini.Ini4JParser.parseIniFile;
import static org.assertj.core.api.Assertions.assertThat;

class Ini4JParserUnitTest {

private static final File TEST_FILE = Paths.get("src", "test", "resources", "sample.ini").toFile();

@Test
void givenIniFileThenCanParseWithIni4j() throws Exception {
Map<String, Map<String, String>> result =
parseIniFile(TEST_FILE);

assertThat(result.get("fonts"))
.containsEntry("letter", "bold")
.containsEntry("text-size", "28");
}

@Test
void givenIniFileThenCanReadKeyFromIt() throws Exception {
assertThat(readIniFileValue(TEST_FILE, "fonts", "letter"))
.isEqualTo("bold");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.baeldung.ini;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.nio.file.Paths;
import java.util.Map;

import static com.baeldung.ini.Ini4JParser.parseIniFile;
import static org.assertj.core.api.Assertions.assertThat;

class SerializeIntoPojoUnitTest {

private static final File TEST_FILE = Paths.get("src", "test", "resources", "sample.ini").toFile();

@Test
void givenAnIniFileThenCanLoadAsPojo() throws Exception {
ObjectMapper objectMapper = new ObjectMapper();

Map<String, Map<String, String>> iniKeys = parseIniFile(TEST_FILE);

MyConfiguration config = objectMapper.convertValue(iniKeys, MyConfiguration.class);

assertThat(config.getFonts().getLetter()).isEqualTo("bold");
assertThat(config.getFonts().getTextSize()).isEqualTo(28);
assertThat(config.getBackground().getColor()).isEqualTo("white");
assertThat(config.getRequestResult().getRequestCode()).isEqualTo(1);
assertThat(config.getResponseResult().getResultCode()).isZero();
}
}
14 changes: 14 additions & 0 deletions libraries-files/src/test/resources/sample.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
; for 16-bit app support

[fonts]
letter=bold
text-size=28

[background]
color=white

[RequestResult]
RequestCode=1

[ResponseResult]
ResultCode=0