Ler e gravar em arquivo XML

Ola pessoal, estou pensando em fazer parametros de configuração do sistema em um arquivo XML, o que voces sugere? TXT ou XML?

Se for XML, como eu faço a leitura e gravação do mesmo?

Abraços

Se for parametros de configuração, usa arquivo do tipo properties, é bem simples de manipular.

Como faz isso?
Eu sempre usei txt, xml ou serializava um objeto do tipo configuracao.

Vou usar como exemplo um arquivo de propriedades do Hibernate

hibernate.properties

hibernate.connection.username = sa
hibernate.connection.password =
hibernate.dialect = org.hibernate.dialect.HSQLDialect
hibernate.connection.driver_class = org.hsqldb.jdbcDriver
hibernate.connection.url = jdbc:hsqldb:file:./banco/teste

Classe que é utilizada para ler o arquivo:

public class LoadProperties {
    //aqui passa o local onde se encontra o arquivo de propriedades, mais seu nome
    private final Properties properties = loadProperties("c:\minha pasta\hibernate.properties");

    public Properties getProperties() {
        return properties;
    }

    /**
     * le as configuracoes no arquivo hibernate.properties.
     * @param arquivo
     * @return propertiesArq - propriedades dos arquivos
     */
    public Properties loadProperties(String arquivo) {
        Properties propertiesArq = new Properties();
        InputStream inputStream = null;
        try {
            inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(arquivo);
            propertiesArq.load(inputStream);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return propertiesArq;
    }
}

Exemplo de como capturar a configuração:

public class Qualquer {

    private void metodoQualquer() {
        LoadProperties loadProperties = new LoadProperties();

        //Captura o valor da propriedade, através da nome da propriedade no arquivo
        // o método getProperty() deve receber o nome da propriedade que se quer buscar no arquivo
        String p1 = loadProperties.getProperties().getProperty("hibernate.connection.username");
        String p2 = loadProperties.getProperties().getProperty("hibernate.dialect");

        System.out.println(p1 + "\n" + p2);
    }

    public static void main(String[] args) {
        new Qualquer().metodoQualquer();
    }
}

Qualquer dúvida, pergunta.

Nao nao amigo, é configuração de sistema mesmo, tipo: Usuario padrao, Loja padrao… saca, dados que o sistema vai pegar pra usar na hora de pegar os dados do sistema e coisas do tipo… entende?

Qual a melhor maneira de se fazer essa comunicação com o XML?

Abraços

Não entendi então, foi mal.

Eu uso esse tipo de arquivo de propriedades para configurações em alguns sistemas.

Coloca ai um dos seus arquivos TXT para ver o que realmente eles contém, fica mais fácil de entender.

Por exemplo mano, eu iria criar um arquivo assim:

BANCO : nomedobanco
HOST : localhost
LOJA : 1

Dai na hora que eu fosse logar, iria passar isso pra variaveis e passar para o properties do hibernate usando setProperties porque o xml acredito eu que fica muito exposto usuario e senha do root, entao preferi usar setProperty.

Entende o que estou querendo fazer amigo? Tipo, eu poderia simplesmente fazer com um txt. Mas acredito que deixar em xml fica melhor para mim pois com txt qualquer um consegue mexer e fazer cagada, mesmo os leigos. Ja um xml é melhor nesse caso.

Abraços

Pois eh, como eu disse, uso esse mesmo tipo de configuração em arquivo do tipo properties.

Mas se vc acha melhor XML, vai ter 1º que criar um modelo do seu XML, com tag root, filhas…

E para ler o xml pode usar algo assim:

    //método responsável por ler o arquivo
    private void loadXML() throws ParserConfigurationException, IOException, SAXException {

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document xml = db.parse(new InputSource("C:\Arquivo.xml"));

        //tag raiz do xml
        Element raiz = xml.getDocumentElement();
        
        //aqui indicamos a tag que queremos o valor. 
        //é preciso converter o resultado em um String, para isso usa-se algo como foi feito no método  getTagValor()  
        String a = getTagValor(raiz, "Filho_1");

        String b = getTagValor(raiz, "Neto");

        String c = getTagValor(raiz, "DataGeracaoXml");

    }

    //Uma forma simples para converter o conteudo da tag em String
    //Pode ser melhor trabalhado.
    private String getTagValor(Element element, String tagName) {
        
        NodeList children = element.getElementsByTagName(tagName);

        String result = null;

        Element child = (Element) children.item(0);

        result = child.getTextContent();

        return result;
    }

Boa tarde.

Para a sua necessidade, um arquivo .properties resolve o seu problema e é simples de manipular isto em Java, como comentado.
Mas caso lhe interesse o XML, podes utilizar o JAXB ou até mesmo, o xStream, que é um API bem interessante também.

Abraços!

Irei verificar e volto a comentar aqui no post.

Obrigado galera.

Abraços