Skip to content

omegaui/json-data-storage

πŸš€ The Shared Preferences API for Java πŸš€

json-data-storage

A tiny json based application data utility for Java.

Features

  • No Redundancy
  • Easily Handles multiple references of same Storage
  • Real-Time Write i.e Automatically Saves file on changes
  • Auto constructs the entire path

Usage

All we need is a DataStorage object.

Basic Call

DataStorage storage = DataStorage.getStorage("settings"); // auto adds ".json suffix", the call is equivalent to "settings.json"
storage.put("theme", "dark");
// When put(String, Object) is called 
// The above line will finish off writing settings.json in the current working directory

Advanced Call

DataStorage storage = DataStorage.getStorage(".config", "settings.json");
storage.put("theme", "dark");
// When put(String, Object) is called 
// The above line will finish off writing settings.json in the .config working directory

Note: DataStorage.getStorage() auto-constructs the path if it doesn't already exist

Querying nested data

DataStorage also allows you to directly access nested objects without needing to use a builder form or caching multiple objects.

To do so, you just need to call DataStorage.query() that requires the ordered arrangement of the hierarchy.

Example:

public class Preferences {
    public static void save(){
        HashMap<String, Integer> map = new HashMap<>();
        map.put("Simon", 99);
        map.put("Alex", 96);
        map.put("Sofia", 89);

        DataStorage storage = DataStorage.getStorage(".config", "settings.json");
        storage.put("students", map); // Auto-Save

        System.out.println(storage.query("students", "Simon"));
        // Displays 99


        DataStorage storage2 = DataStorage.getStorage(".config", "settings.json");
        storage2.put("teachers", 18); // Auto-Save
        // storage2 is the same storage object with no object redundancy 😎

    }

    public static void main(String[] args) {
        save();
    }
}

Handling Multiple References

Now, if there are multiple cases requesting the reference to the same DataStorage object, so instead of creating multiple instances pointing to the same storage location, the same instance is referenced at every call.

Example:

public class Preferences{
    public void saveTheme(){
        DataStorage storage = DataStorage.getStorage(".config", "settings.json");
        storage.put("theme", "dark");
    }
    
    public void saveUserInfo(){
        DataStorage storage = DataStorage.getStorage(".config", "settings.json");
        storage.put("username", "iron-man");
        storage.put("password", "!@#$%^&*^");
    }
}

Although, the storage objects request the same json file, so instead of creating multiple references of the class, a single instance is shared to both.

its Like

storage1 = storage2 = the_shared_object