Problemas com Arquivo Properties

Salve Amigos Do forum,

Estou com um pequeno probleminha para carregar um arquivo de properties para um aplicação web.

Eu ja tentei de várias formas porém não estou conseguindo obter sucesso.

Eis o código da minha classe Factory.

package dao;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

/**
 *
 * @author markos
 * @date 25-09-2010
 * @description Classe que irá fabricar conexões com o banco de dados
 */
public class ConnectionFactory
{
    private static Connection con = null;

    public static Connection getConnection() throws SQLException, FileNotFoundException,
                                                    IOException, ClassNotFoundException
    {
        Properties prop = new Properties();
        FileInputStream file = new FileInputStream("/resources/spc.properties");
        String url;
        String user;
        String pwd;
        String driver;

        prop.load(file);

        driver = prop.getProperty("driver");
        url = prop.getProperty("url");
        user = prop.getProperty("user");
        pwd = prop.getProperty("pwd");

        Class.forName(driver);

        con = DriverManager.getConnection(url, user, pwd);

        return con;
    }

    public static void closeConnection() throws SQLException
    {
        if (con != null)
            con.close();
    }
}

E eis o conteúdo do meu arquivo de properties localizado no diretório resources

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/spc
username=root
password=admin

Toda vez que eu executo a aplicação e ela passa pela linha do FileInputStream é levantada a Excessão FileNotFoundException.

Vi na internet em alguns foruns a utilização do ResourceBundle e o InpuntStream, porém não obtive sucesso.

Alguém ai teria alguma dica?

Estou utilizando Ubuntu 9.10 + Netbeans 6.8

Desde ja agradeço.

:lol:

Quando eu fazia aplicações desktop criava o arquivo db.properties e a classe Conexao:

public class Conexao
{	private static Conexao conexao = null;
	private Connection conn;
		
	private Conexao()
	{	try
		{
                        ResourceBundle prop = ResourceBundle.getBundle("br.sistema.utils.bd"); // aqui vc aponta pro caminho onde esta o bd.properties
                        
                        String driver = prop.getString("driver");				
                        String bd = prop.getString("bd");
			String usuario = prop.getString("usuario");
                        String senha = prop.getString("senha");
                        				
			Class.forName(driver); 
			conn = DriverManager.getConnection(bd,usuario,senha);
		}
		catch (SQLException e)
		{
                        JOptionPane.showMessageDialog(null, e);
                      
		}				
		catch (ClassNotFoundException e)
		{	JOptionPane.showMessageDialog(null, e);
		}		
                catch(MissingResourceException e)
		{	JOptionPane.showMessageDialog(null, e);
		}                
	}

	public static Connection getConnection()
	{	if (conexao == null)
		{	conexao = new Conexao();
		}
		return conexao.conn;		
	}
		
	public void close()
	{	try
		{	conn.close();
		}
		catch(SQLException e)
		{ }
	}		
}

Ai é só pegar o código que vc precisa da conexão, desconsidere o JOptionPane. =)
[]s

Quando vc coloca o caminho desse jeito /resources/spc.properties o sistema operacional ira procurar o diretório /resource no Linux e no Windows vai dar pau direto mesmo. O melhor é pegar os resources pelo Class.getResource ou ClassLoader.getResource. Por exemplo:

Um projeto com essa estrutura

dao/
dao/ConnectionFactory.java
dao/spc.properties

Vc poderia ler o spc.properties da seguinte maneira no ConnectionFactory:

InputStream is = ConnectionFactory.class.getResourceAsStream(“spc.properties”);
// ou
InputStream is = ConnectionFactory.class.getClassLoader().getResourceAsStream("/dao/spc.properties");

Já com essa estrutura vc pegaria assim:

spc.properties
dao/
dao/ConnectionFactory.java

InputStream is = ConnectionFactory.class.getResourceAsStream("…/spc.properties");
// ou
InputStream is = ConnectionFactory.class.getClassLoader().getResourceAsStream(“spc.properties”);

So complementando é sempre aconselhável pegar os resources pelo ClassLoader, pq fica independente do local da classe. Por que se alterar o pacote da classe terá que refazer o getResource para readequar o caminho.

Entnedi…

Agradeço pelas respostas…

Eu encontrei um método parecido em um forum que foi o seguinte:

Na servlet que utilizo para acessar minha Factory eu utilizei o codigo:

String url = getServletContext().getRealPath("/resources");

Com isso a minha variavel url ficou preenchida com o caminho real do path da minha aplicação até o diretório resources…

E na hora de instanciar o FileInputStream eu simplesmente coloquei:

FileInputStream file = new FileInputStream(urlApp + "/spc.properties");

E também obtive sucesso…

Obrigado !