Boa Tarde pessoal,
Estou com a seguinte dificuldade, eu possuo um arquivo de configuração do meu sistema com a extensão .properties. Enqto eu estava rodando o sistema pelos IDES ele funcionava normalmente, foi qdo resolvi gerar um arquivo .jar, gerei na boa, mas qdo eu tento rodar o meu sistema por esse arquivo, o sistema não roda, pois ele não acha o meu arquivo de consfiguração.properties. Já revirei a internet e não achei uma forma ainda, então resolvi escrever nesse Fórum para ver se vcs me ajudam. A parada é o seguinte, como que eu faço para ler um arquivo .properties de dentro do meu .jar???
Faça o seguinte utilize a classe URL :
URL urlFile = SuaClasse.class.getResource("arquivo.properties");
System.out.println("Path "+urlFile.getFile());
O método urlFile.getFile() lhe retorna o caminho absoluto do arquivo;
Ok, mas a parada é o seguinte, qdo o meu sistema esta carregando, ele pega o meu arqivo.properties e joga em uma váriavel do tipo File, para que depois eu possa utiliza-la, mas nem colocando na mão não esta funcionando, o meu código esta assim:
[code]
public Properties getProperties(){
if (properties != null)
return properties;
URL url = this.getClass().getClassLoader().getResource("/home/leandroromancini/workspace/VisitPortaria/dist/VisitPortaria.jar!/GIPConfiguration.properties");
File fileConfig = new File(url.getFile().replaceAll("%20"," ").substring(0,url.getFile().replaceAll("%20"," ").length()));
//Qdo rodo pelo arquivo jar ele entra nesse if
if(!fileConfig.exists())
throw new RuntimeException("Arquivo de configura��es n�o encontrado.");
properties=new Properties();
try {
properties.load(new FileInputStream(fileConfig));
} catch( Exception ioExc) {
String strErr="Erro lendo arquivo de configura��o. Sistema encerrado.";
throw new RuntimeException(strErr, ioExc);
}
return properties;
}[/code]
Fiz algumas modificações no meu código, mas continuo com problema qdo o meu arquivo .properties esta dentro de um jar, pois não estou conseguindo setar a minha váriavel File fileConfig com o meu properties que esta dentro do meu jar. Se eu rodo sem o meu jar funciona, vcs sabem o que eu posso esta fazendo de errado?
Segue abaixo o meu código:
public Properties getProperties(){
if (properties != null)
return properties;
URL url = this.getClass().getClassLoader().getResource("GIPConfiguration.properties");
System.out.println("URL Properties: " + url.getFile());
File fileConfig = new File(url.getFile().replaceAll("%20"," ").substring(0,url.getFile().replaceAll("%20"," ").length()));
System.out.println("File Config Properties: " + fileConfig);
// Ele esta sempre entrando nesse if SOCORRO!!!!!!!!!
if(!fileConfig.exists())
throw new RuntimeException("Arquivo de configuracao do Properties nao encontrado.");
properties=new Properties();
try {
properties.load(new FileInputStream(fileConfig));
} catch( Exception ioExc) {
String strErr="Erro lendo arquivo de configuracao. Sistema encerrado.";
throw new RuntimeException(strErr, ioExc);
}
return properties;
}
Isso aqui está correto?
url.getFile().replaceAll("%20"," ").substring(0,url.getFile().replaceAll("%20"," ").length())
Cara, pode ignorar essa parte, isso dai serve para tirar espaço em branco se tiver, mas já coloquei apenas setando com a url e também não funcionou, vc sabe o que pode ser???
Tente assim:
ResourceBundle resources = ResourceBundle.getBundle("arquivo.properties") ;
String property1=resources.getString("property1") ;
Bom dia Roger,
Cara, desculpe a minha ignorância, mas não entendi como fazer dessa sua forma. Tentei fazer, mas dá o seguinte erro já na primeira linha desse seu código:
java.util.MissingResourceException: Can't find bundle for base name GIPConfiguration.properties, locale pt_BR
E outra, eu não entendi a linha,
String property1=resources.getString("property1") ;
Socorro, preciso disso URGENTE no meu trabalho…
Este arquivo “GIPConfiguration.properties” está dentro do seu jar, logo na raiz, ou em algum diretório dentro do jar? Se estiver num diretório você tem que especificar o caminho todo.
A linha
String property1=resources.getString("property1") ;
é só um exemplo de como pegar o valor de uma propriedade que está no arquivo.
O meu arquivo “GIPConfiguration.properties” esta na raiz do meu jar. Eu acrescentei a seguinte linha:
1) Locale currentLocale = new Locale("pt","BR");
2) ResourceBundle messages = ResourceBundle.getBundle("GIPConfiguration.properties", currentLocale);
3) String property1 = messages.getString("GIPConfiguration.properties");
Mas na linha 2 apresenta o seguinte erro:
java.util.MissingResourceException: Can't find bundle for base name GIPConfiguration.properties, locale pt_BR
Esta certo o jeito que eu fiz na linha 3???
Utilizo esse código aqui e funciona ok:
public Properties getProperties(){
File file;
FileInputStream fis;
Properties prop = new Properties();
try {
// lê o arquivo
file = new File(Thread.currentThread().getClass().getResource("/Access.properties").toURI());
fis = new FileInputStream(file);
prop.load(fis);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (URISyntaxException ex) {
ex.printStackTrace();
}
return prop;
}
Luiz, tentei dessa sua forma, mas dá java java.lang.NullPointerException quando tenta criar o arquivo.
Roger,
Será que para fazer dessa sua forma eu não teria que setar nos Properties do meu projeto na aba Source onde diz Default output folder, o src do meu projeto???
Porque provavelmente ele não encontra o arquivo.
vc alterou apenas o nome do arquivo ali na chamada correto? deixou com a barra?
Luiz,
Estava dando erro na execução, pois eu achava que teria q ir sem a barra. Bom, rodando pela IDE funcionou, agora vou gerar o meu jar e ver se funciona tbm…
Mando noticias…
Luiz,
Tentei executar o meu jar buscando o meu arquivo properties daquela forma que vc falou e apresentou o seguinte erro:
java.lang.IllegalArgumentException: URI is not hierarchical
Vc sabe o que pode estar ocasionando esse erro???
OBS: Continuo com o problema que o meu sistema só funciona rodando pela IDE, pelo jar não tem jeito.
Luiz (ou para quem estiver afim de me ajudar),
Coloquei vários println no meu método getProperties e descobri o seguinte, o caminho ele até esta achando, pois ele imprimiu para mim o seguinte na minha váriavel urlDebug: file:/D:/Temp/Sistema/Sistema.jar!/GIPConfiguration.properties, mas qdo eu vou criar o meu fileDebug ele me dá o seguinte erro:
java.lang.IllegalArgumentException: URI is not hierarchical
Alguém sabe como que eu faço para resolver isso??? Pessoal, por favor me ajudem, eu preciso disso URGENTE!!!
O código do meu getProperties é o seguinte:
public Properties getProperties(){
File file;
File fileDebug;
FileInputStream fis;
Properties prop = new Properties();
URL urlDebug = this.getClass().getResource("/GIPConfiguration.properties");
try {
// lê o arquivo
System.out.println(urlDebug.getFile());
fileDebug = new File(urlDebug.toURI());
System.out.println(fileDebug.toString());
file = new File(Thread.currentThread().getClass().getResource("/GIPConfiguration.properties").toURI());
System.out.println(file.toString());
fis = new FileInputStream(file);
prop.load(fis);
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} catch (URISyntaxException ex) {
ex.printStackTrace();
}
return prop;
}
VAMOS LÁ GALERA, ME AJUDEM…
Eu estava recebendo esse mesmo erro… e com aquele código acima eu consegui resolver, mas vou ver se lembro de mais algum detalhe e já posto aqui.
Dae Luiz, lembrou de alguma coisa??? Desculpa ficar enchendo, mas é que eu estou com a corda no pescoço e só falta isso para eu entregar o projeto…
Conseguiu alguma coisa ai cara?
Não velho, já fiz de várias formas e continuo com o mesmo problema, roda na IDE mas qdo tento executar o meu .jar ele não acha, será que não teria que configurar algo no meu windows, sei lá… Tá batendo o desespero já, pois tenho até amanhã para entregar essa bulufa e estou apanhando para criar isso… Vc por acaso não lembrou de nada diferente???