Zielony Smok - logo witryny

Properties – zapisywanie i odczytywanie (3)

Obiekt Properties to hashmapa przechowująca pary wartości: “nazwa właściwości – wartość” podane jako łańcuchy znaków. Properties zapisuje się do plików .properties. Tutaj pokazuję jak zapisać Properties do pliku XML.

Zapisywanie

Klasa R021.java
package aderby.start;

import aderby.DerbyUtil;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.*;

public class R021 {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("user", "Jacek");
        props.put("password", "abcdefgh");
        props.put("create", "true");
        props.put("nazwa", "ąęśćżźółń");
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(
                    "aderby/src/resources/props/r021.xml");
            props.storeToXML(fos, "Właściwości startowe",
                    StandardCharsets.UTF_8);
        } catch (IOException e) {
            e.printStackTrace();
        }
        DerbyUtil.close(fos);
    }
}

Po uruchomieniu klasy otrzymujemy plik r021.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Właściwości startowe</comment>
<entry key="password">abcdefgh</entry>
<entry key="create">true</entry>
<entry key="user">Jacek</entry>
<entry key="nazwa">ąęśćżźółń</entry>
</properties>

Odczytywanie

Klasa R021a.java
package aderby.start;

import aderby.DerbyUtil;

import java.io.*;
import java.util.*;
import java.util.Map.*;

public class R021a {
    public static void main(String[] args) {
        FileInputStream fis = null;
        Properties props = new Properties();
        try {
            fis = new FileInputStream(
                    "aderby/src/resources/props/r021.xml");
            props.loadFromXML(fis);
        } catch (IOException e) {
            e.printStackTrace();
        }
        //albo
        Set<Entry<Object, Object>> pr = props.entrySet();
        for (Entry<Object, Object> entry : pr) {
            String nazwa = (String) entry.getKey();
            String value = (String) entry.getValue();
            System.out.println(nazwa + "=" + value);
        }
        //albo
        //props.forEach((key, value) -> System.out.println(key + ": " + value));
        DerbyUtil.close(fis);
    }
}

Po uruchomieniu klasy na konsoli zobaczymy:

password=abcdefgh
create=true
user=Jacek
nazwa=ąęśćżźółń

Pliki do ściągnięcia

Aktualny (tworzony narastająco) plik module-info.java

Aktualny (tworzony narastająco) plik DerbyUtil.java

Pliki tworzone narastająco zastępują poprzednie pliki o tej samej nazwie i działają dla wszystkich wcześniej opublikowanych przykładów we wszystkich wpisach w projekcie. W przypadku pliku module-info.java może być potrzebne skreślenie niepotrzebnych wpisów.