content: package org.flashtool.system;
  
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.io.OutputStreamWriter;
  import java.io.Reader;
  import java.io.Writer;
  import java.util.Enumeration;
  import java.util.Iterator;
  import java.util.Properties;
  import java.util.Set;
  import java.util.Vector;
  
  import org.flashtool.gui.models.TableLine;
  import lombok.extern.slf4j.Slf4j;
  
  @Slf4j
  public class PropertiesFile {
  
  	String rname;
  	String fname;
  	Properties props;
  	
  	public PropertiesFile() {	
  		props=new Properties();
  	}
  	
  	public void setProperties(Properties p) {
  		props=p;
  	}
  	
  	public void mergeWith(PropertiesFile pf) {
  		Iterator i = pf.keySet().iterator();
  		while (i.hasNext()) {
  			String key = (String)i.next();
  			props.setProperty(key, pf.getProperty(key));
  		}
  	}
  	
  	public void open(String arname, String afname) {
  		rname = arname;
  		fname = afname;
          try {
          	props = new Properties();
          	Reader in = new InputStreamReader(new FileInputStream(fname), "UTF-8"); 
          	props.load(in);
          }
          catch (Exception e) {
          	try {
          		props = new Properties();
          		if (rname.length()>0) {
          			Reader in = new InputStreamReader(PropertiesFile.class.getClassLoader().getResourceAsStream(rname), "UTF-8");
          			props.load(in);
          		}
          	}
          	catch (Exception e1) {
          	}
          }		
  	}
  	
  	public PropertiesFile(String arname, String afname) {
  		open(arname, afname);
  	}
  	
  	public String getProperty(String key) {
  		return props.getProperty(key);
  	}
  	
  	public Set<Object> keySet() {
  		return props.keySet();
  	}
  	
  	public void setProperty(String key, String value) {
  		props.setProperty(key, value);
  	}
  	
  	public void write(String filename,String encoding) {
  		try {
  			new File(filename).getParentFile().mkdirs();
  			Writer out = new OutputStreamWriter(new FileOutputStream(filename), encoding);
  			props.store(out, null);
  			out.flush();
  			out.close();
  		}
  		catch (Exception e) {
  		}		
  	}
  
  	public void setFileName(String filename) {
  		fname = filename;
  	}
  	
  	public void write(String encoding) {
  		write(fname,encoding);
  	}
  	
  	public Properties getProperties() {
  		return props;
  	}
  	
  	public void load(InputStream is) throws Exception {
  		props.load(is);
  	}
  	
  	public void remove(String key) {
  		props.remove(key);
  	}
  	
  	public Object[] toArray() {
  		Vector<TableLine> v = new Vector<TableLine>();
  		Enumeration<Object> e = props.keys();
  		while (e.hasMoreElements()) {
  			String key = (String)e.nextElement();
  			TableLine l = new TableLine();
  			l.add(key);
  			l.add(props.getProperty(key));
  			v.add(l);
  		}
  		return v.toArray();
  	}
  	
  	
  }