Arquivos Properties

12 respostas
xwillianss

Olá, não estou conseguindo ler um arquivo .properties.
Estou fazendo assim:

InputStream stream = this.getClass().getResourceAsStream("mysql.properties");
Properties p = new Properties();
p.load(stream);

mas o java insiste em dizer que o arquivo não existe… mas o arquivo esta lá.

12 Respostas

xwillianss

… o arquivo esta no mesmo pacote.

rafaelglauber

Oi,

prop = new Properties(); inStream = null; try{ inStream = new FileInputStream("mysql.properties"); } catch(FileNotFoundException err){ err.printStackTrace(); } try{ prop.load(inStream); } catch(IOException err){ err.printStackTrace(); }

e coloque o arquivo no pacote padrão (/src)

xwillianss

RafaelGlauber, beleza? mas o arquivo pode ficar fora do pacote? E quando eu quiser exportar ele para outra aplicação?

rafaelglauber

Oi,

O construtor é sobrecarregado, no caso estou usando ele com String, logo tenho que fornecer a localização do arquivo. Note que só coloquei o nome do arquivo, logo o mesmo deve estar no classpath da aplicação para que a mesma o encontre, caso queira colocar dentro de uma pasta não visível pela aplicação terá que colocar o caminho completo do arquivo, lembrando que a sintaxe do caminho entre as plataformas mudam, exemplo:

linux: /usr/local/resources/mysql.properties
windows: c:\app\resources\mysql.properties

o caminho é por ai.

xwillianss

entendi

xwillianss

não deu certo não…
Peço que observem minha classe e meu properties

mysqlprops.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/test
user=root
password=

MysqlProperties.java

package org.willian.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class MysqlProperties {

    private String driver;
    private String url;
    private String user;
    private String password;

    public MysqlProperties() throws IOException {
        this.driver = this.getProperties().getProperty("driver");
        this.url = this.getProperties().getProperty("url");
        this.user = this.getProperties().getProperty("user");
        this.password = this.getProperties().getProperty("password");
    }

    private Properties getProperties() throws IOException {
        InputStream inStream = this.getClass().getResourceAsStream("mysqlprops.properties");
        Properties props = new Properties();
        props.load(inStream);
        return props;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getUrl() {
        return url;
    }

    public String getUser() {
        return user;
    }

    public String getPassword() {
        return password;
    }
}

eu já não sei mais o que fazer… a dois dias atrás eu fiz desse mesmo jeito e deu certo agora não deu mais. Alguém pode me ajudar?

rafaelglauber

Oi,

package org.willian.jdbc;

import java.io.IOException;
import java.io.InputStream;
import java.io.FileInputStream;       // adicionado
import java.io.FileNotFoundException; // adicionado
import java.util.Properties;

public class MysqlProperties {

    private String driver;
    private String url;
    private String user;
    private String password;

    public MysqlProperties() throws IOException {
        this.driver = this.getProperties().getProperty("driver");
        this.url = this.getProperties().getProperty("url");
        this.user = this.getProperties().getProperty("user");
        this.password = this.getProperties().getProperty("password");
    }

    private Properties getProperties() throws IOException {                
        Properties props = new Properties();
        InputStream inStream = null;
        try{ 
            // se tiver no classpath faça assim
            inStream = new FileInputStream("mysqlprops.properties");
            // senão
            inStream = new FileInputStream("c:\pasta\mysqlprops.properties");
        } catch(FileNotFoundException err){
            err.printStackTrace();
        }    
        try{
            props.load(inStream);
        } catch(IOException err){
            err.printStackTrace();
        }        
        //
        return props;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }

    public String getUrl() {
        return url;
    }

    public String getUser() {
        return user;
    }

    public String getPassword() {
        return password;
    }
}

Repare nos comentários

xwillianss

Rafael, tudo bem? Olha eu copie todo seu código e deu esse erro aqui:

java.io.FileNotFoundException: mysqlprops.properties (O sistema não pode encontrar o arquivo especificado)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at org.willian.jdbc.MysqlProperties.getProperties(MysqlProperties.java:28)
        at org.willian.jdbc.MysqlProperties.<init>(MysqlProperties.java:17)
        at org.willian.jdbc.Teste.main(Teste.java:7)
Exception in thread "main" java.lang.NullPointerException
        at java.util.Properties$LineReader.readLine(Properties.java:418)
        at java.util.Properties.load0(Properties.java:337)
        at java.util.Properties.load(Properties.java:325)
        at org.willian.jdbc.MysqlProperties.getProperties(MysqlProperties.java:35)
        at org.willian.jdbc.MysqlProperties.<init>(MysqlProperties.java:17)
        at org.willian.jdbc.Teste.main(Teste.java:7)
Java Result: 1

o arquivo esta dentro do pacote org.willian.jdbc junto com a classe MysqlProperties.java

xwillianss

minha classe de teste é essa:

package org.willian.jdbc;

import java.io.IOException;

public class Teste {
    public static void main(String[] args) throws IOException {
        MysqlProperties obj = new MysqlProperties();
        System.out.println("Usuário: " + obj.getUser());
    }
}
xwillianss

conseguirrrrrrrrrrrrrrrrrrrrrrrrr… resolvido Rafael:
o erro foi o caminho do arquivo errado. Obrigado cara, valeu mesmo!

rafaelglauber

Oi,

Você leu os comentários? Falei que deveria usar ou uma ou outra opção para carregar o arquivo. Você deve entender que o arquivo tem que ter visibilidade para a aplicação…aconselho a usar a opção 2:

inStream = new FileInputStream("c:\pasta\mysqlprops.properties");

Coloque seu arquivo na pasta que deseja e informe o caminho completo.

=> Lembre de comentar a linha anterior.

ps. o arquivo estando dentro do pacote que você colocou ele não tem visibilidade para seu programa, ele deveria está no raiz como disse nas primeiras mensagens.

xwillianss

rafaelglauber:
Oi,

Você leu os comentários? Falei que deveria usar ou uma ou outra opção para carregar o arquivo. Você deve entender que o arquivo tem que ter visibilidade para a aplicação…aconselho a usar a opção 2:

inStream = new FileInputStream("c:\pasta\mysqlprops.properties");

Coloque seu arquivo na pasta que deseja e informe o caminho completo.

=> Lembre de comentar a linha anterior.

ps. o arquivo estando dentro do pacote que você colocou ele não tem visibilidade para seu programa, ele deveria está no raiz como disse nas primeiras mensagens.

Valeu RafaelGlauber pelas dicas fico muito grato cara.

Criado 1 de outubro de 2008
Ultima resposta 1 de out. de 2008
Respostas 12
Participantes 2