Arquivos Properties

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á.

… o arquivo esta no mesmo pacote.

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)

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

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.

entendi

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?

Oi,

[code]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;
}

}

[/code]

Repare nos comentários

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

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());
    }
}

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

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.

[quote=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.[/quote]

Valeu RafaelGlauber pelas dicas fico muito grato cara.