All Downloads are FREE. Search and download functionalities are using the official Maven repository.

play.utils.Properties Maven / Gradle / Ivy

There is a newer version: 2.6.2
Show newest version
package play.utils;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Serial;
import java.util.HashMap;

/** Like Java's Properties, but with: encoding generic type helper. */
public class Properties extends HashMap {

  @Serial private static final long serialVersionUID = 1L;

  public synchronized void load(InputStream is) throws IOException {
    load(is, "utf-8");
  }

  public synchronized void load(InputStream is, String encoding) throws IOException {
    if (is == null) {
      throw new NullPointerException("Can't read from null stream");
    }
    try (BufferedReader rd = new BufferedReader(new InputStreamReader(is, encoding))) {
      while (true) {
        String tmp = rd.readLine();
        if (tmp == null) {
          break;
        }
        tmp = tmp.trim();

        if (tmp.startsWith("#")) {
          continue;
        }
        if (!tmp.contains("=")) {
          put(tmp, "");
          continue;
        }

        String[] kv = tmp.split("=", 2);
        if (kv.length == 2) {
          put(kv[0], kv[1]);
        } else {
          put(kv[0], "");
        }
      }
    }
  }

  public String get(String key, String defaultValue) {
    if (containsKey(key)) {
      return get(key);
    } else {
      return defaultValue;
    }
  }

  public synchronized void store(OutputStream out) throws IOException {
    store(out, "utf-8");
  }

  public synchronized void store(OutputStream out, String encoding) throws IOException {
    if (out == null) {
      throw new NullPointerException("Can't store to null stream");
    }
    BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(out, encoding));
    for (String key : keySet()) {
      if (!key.isEmpty()) {
        wr.write(key + "=" + get(key) + System.getProperties().getProperty("line.separator"));
      }
    }
    wr.flush();
    wr.close();
  }

  public double getDouble(String key) throws IllegalArgumentException {
    String s = get(key);
    try {
      return Double.parseDouble(s);
    } catch (NumberFormatException e) {
      throw new IllegalArgumentException("Property must be an double value :" + key, e);
    }
  }

  public double getDouble(String key, long defaultValue) throws IllegalArgumentException {
    String s = get(key);
    if (s == null) {
      return defaultValue;
    }
    try {
      return Double.parseDouble(s);
    } catch (NumberFormatException e) {
      throw new IllegalArgumentException("Property must be an double value :" + key, e);
    }
  }

  public void setDouble(String key, double val) {
    put(key, Double.toString(val));
  }

  public int getInt(String key) throws IllegalArgumentException {
    String s = get(key);
    try {
      return Integer.parseInt(s);
    } catch (NumberFormatException e) {
      throw new IllegalArgumentException("Property must be an integer value :" + key, e);
    }
  }

  public int getInt(String key, int defaultValue) throws IllegalArgumentException {
    String s = get(key);
    if (s == null) {
      return defaultValue;
    }
    try {
      return Integer.parseInt(s);
    } catch (NumberFormatException e) {
      throw new IllegalArgumentException("Property must be an integer value :" + key, e);
    }
  }

  public void setInt(String key, int val) {
    put(key, Integer.toString(val));
  }

  public void setLong(String key, long val) {
    put(key, Long.toString(val));
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy