Salvar alterações em um programa

Oi,
Não sei como fazer, mas a idéia é a seguinte: tenho uma classe que edita uma série de valores, acrescenta nodos, etc, em um frame. O que eu queria é que ao fechar o programa essas alterações fossem salvas em um executável, que mantivesse as mesmas características, que fosse exatamente igual ao que estava sendo mostrado no frame. Tem como?
Agradeço a quem puder me dar uma luz.

Utiliza property, que é quase a mesma coisa que um arquivo .INI do windows, vou por um exemplo.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
import java.util.ResourceBundle;
 
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

public class InterfaceSettings {
	// stream para carregar arquivo
	private FileInputStream fis = null;

	// stream para gravar arquivo
	private FileOutputStream fos = null;

	private File fFile = new File("config.properties");

	// properties
	private Properties props = new Properties();

	// create a new file chooser
	private JFileChooser fc = new JFileChooser(new File("."));
	
	private FileFilter filefilter = new FileFilter();

	/**
	 * Carrega Arquivo de Configurações 
	 * 
	 */
	public void loadConfig() {
		
		fc.setDialogTitle("Open File Configuration");

		// Choose only files, not directories
		fc.setFileSelectionMode(JFileChooser.FILES_ONLY);

		// Start in current directory
		fc.setCurrentDirectory(new File("."));

		// Set filter for Java source files.
		fc.setFileFilter(filefilter);

		// Now open chooser
		int result = fc.showOpenDialog(fc);
		if (result == JFileChooser.APPROVE_OPTION) {
			try {
				fFile = fc.getSelectedFile();
				fis = new FileInputStream(fFile);
				// carrega arquivo de configuracao
				props.load(fis);
				// fecha stream
				fis.close();
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				JOptionPane.showMessageDialog(null, "error file notFound","MessageBox Title", 1);
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

	
	/**
	 * Escreve Configurações no arquivo
	 * 
	 */
	public void writeConfig() {
		// arquivo encontra-se no mesmo diretório da aplicação
		// Set filter for Java source files.
	     fc.setFileFilter (filefilter);
	     // Set to a default name for save.
	     fc.setSelectedFile (fFile);

	     // Open chooser dialog
	     int result = fc.showSaveDialog (fc);

	     
	      if (result == JFileChooser.APPROVE_OPTION) {
	         fFile = fc.getSelectedFile ();
	         if (fFile.exists ()) {
	             int response = JOptionPane.showConfirmDialog (null,
	               "Overwrite existing file?","Confirm Overwrite",
	                JOptionPane.OK_CANCEL_OPTION,
	                JOptionPane.QUESTION_MESSAGE);
	             if (response == JOptionPane.OK_OPTION) {
	            	 writeFile(fFile);
	         		}
	             }else
	            	 writeFile(fFile);
	         }
	      }
		
		
	private void writeFile(File file){
		 try {
  			// cria stream de saida para o arquivo
  			fos = new FileOutputStream(file);
  			// grava os dados no arquivo
  			props.store(fos, " Settings - \n Please Do Not Modify this Archive");
  			// fecha stream
  			fos.close();
  		} catch (IOException ex) {
  			System.out.println(ex.getMessage());
  			ex.printStackTrace();
  		}
 
        // Aqui você vai criar seus gets e set de configuracao

public void setValor(int iValor) {
		props.setProperty("main.valor", String.valueOf(iValor));
	}

        //aqui você faz o get, se nada for encontrado no arquivo ele retorna o valor 100
	public int getValor() {
		return Integer.parseInt(props.getProperty("main.valor", "100"));
	}
}

classe apenas para o filedialog (escolher extensão)

public class FileFilter extends javax.swing.filechooser.FileFilter{
	 /** Filter to work with JFileChooser to select properites configuration file types. **/

	public boolean accept(File f) {
		   return f.getName ().toLowerCase ().endsWith (".properties")
	          || f.isDirectory ();
		
	}

	public String getDescription() {
		// TODO Auto-generated method stub
		return "Configuration File (*.properties)";
	}
}
//na sua classe responsavel por carregar as opções
// instanciando classe para controlar configuracoes
	InterfaceSettings settings = new InterfaceSettings();

       public void loadConfig(){
       settings.loadConfig(); // carrega arquivo de configuracao
		
		// atualiza valores na interface
		
		int iValor
		iValor = settings.getValor();
              // agora você  recuperou o valor, agora é só aplicar no seu formulario
  		}
  		
}

    public void writeConfig(){
    //escrevendo configuracoes no arquivo, aqui utilizei um exemplo para ele pegar o valor de um jscrollbar
        settings.setValor(jscrollbar1.getValue());
}

depois é só adaptar ao seu código

espero ter ajudado

Muito obrigada.

Olá pessoal!
Gostaria de fazer isso sem um JFileChooser.
Já escrevi meu arquivo de configurações, o qual vai ser sempre o mesmo, e quero carrega-lo em cada inicialização do programa, mas não estou conseguindo adaptar o código.
Já li, reli e testei varias idéais mas ainda nada… alguém poderia ajudar-me?

Como carregar as configurações de um arquivo no disco fornecendo o caminho?

Olá migo

tente este código:

/**
 *
 * @author silvio
 */


import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException; 
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ConexaoBancoDados {
    
    static String url,username,password;
    
    public static ResultSet executeQuery(String string) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
    
  public void readConfig() {
       Properties p = new Properties();  
        try {
            InputStream con = this.getClass().getClassLoader().getResourceAsStream("config.properties");
            p.load(con);
        } catch (IOException ex) {
            ex.printStackTrace();
            Logger.getLogger(ConexaoBancoDados.class.getName()).log(Level.SEVERE, null, ex);
        }
       url = "jdbc:"+p.getProperty("PROTOCOL")+"://"+p.getProperty("HOSTNAME")+":5432/"+p.getProperty("DATABASE");
       username = p.getProperty("USER");
       password = p.getProperty("PASSWORD");    
}     
  
   
 public ConexaoBancoDados() {
}
//metodo para retorna a conexão com o banco de dados
public static Connection conexao() throws ClassNotFoundException,SQLException{
    ConexaoBancoDados conecta = new ConexaoBancoDados();
        try {
            conecta.readConfig();
        } catch (Exception ex) {
            ex.printStackTrace();
            Logger.getLogger(ConexaoBancoDados.class.getName()).log(Level.SEVERE, null, ex);
        }
    Class.forName("org.postgresql.Driver");
    Connection conexao = DriverManager.getConnection(url,username,password);
//      Connection conexao = DriverManager.getConnection("jdbc:postgresql:assistenciatecnica", "postgres","mzx0050");
    return conexao;
}


} 

arquivo de configurações:

DIRETORIO_RELATORIOS=
HOSTNAME=localhost
DATABASE=teste
USER=postgres
PASSWORD=xxxxxxx

Espero ter ajudado.

Silvio Guedes

Muito obrigado amigo!
Vou procurar entender melhor a manipulação de arquivos, entretanto por hora isso era tudo que eu precisava :smiley: