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