{"id":267,"date":"2012-10-25T21:39:01","date_gmt":"2012-10-26T00:39:01","guid":{"rendered":"https:\/\/www.erudio.com.br\/blog\/?p=267"},"modified":"2022-12-21T18:08:24","modified_gmt":"2022-12-21T21:08:24","slug":"lendo-arquivos-de-configuracao-properties","status":"publish","type":"post","link":"https:\/\/www.erudio.com.br\/blog\/lendo-arquivos-de-configuracao-properties\/","title":{"rendered":"Lendo arquivos de configura\u00e7\u00e3o .properties"},"content":{"rendered":"<p>Quem trabalha com desenvolvimento Java certamente j\u00e1 teve contato e\/ou vez ou outra teve que configurar arquivos com a extens\u00e3o<strong>&nbsp;.properties<\/strong>. Esses arquivos s\u00e3o muito uteis quando precisamos configurar propriedades de algum sistema de forma que n\u00e3o seja via banco e nem fique preso as classes Java. Quando um arquivo .properties \u00e9 lido por classes Java as informa\u00e7\u00f5es s\u00e3o armazenadas em um mapa de chave e valor. Dessa forma precisamos apenas jogar esses valores em algum a vari\u00e1vel e fazermos o que bem entendermos com ela.<\/p>\n<p>Numa classe de envio de emails por exemplo poder\u00edamos armazenar alguns dados em arquivos properties como no exemplo abaixo:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\n    \/\/Trecho do nosso arquivo de propriedades\n    smtp=smtp.gmail.com\n    porta=587\n    ssl=true\n<\/pre>\n<p>A classe java abaixo \u00e9 respons\u00e1vel por ler esse arquivo .properties<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\npackage br.com.semeru.util;\n\nimport java.io.File;\nimport java.io.FileInputStream;\nimport java.util.Properties;\nimport javax.faces.context.FacesContext;\n\npublic class PropertiesLoader {    \n\n\t\/\/Crio uma instancia da classe properties\n    private static Properties prop = new Properties();\n\n\t\/\/Crio um m\u00e9todo est\u00e1tico que pode ser acessado por outras classes da aplica\u00e7\u00e3o sem a necessidade de instanciar\n    public static Properties propertiesLoader() {\n\n\t\t\/\/Informo o caminho onde se encontra meu arquivo properties de forma din\u00e2mica\n\t\t\/\/Poderia fazer isso de forma est\u00e1tica passando o diret\u00f3rio completo mas obviamente isso n\u00e3o \u00e9 muito interessante.\n        String atualDir = FacesContext.getCurrentInstance().getExternalContext().getRealPath(&quot;\/&quot;)\n            +&quot;WEB-INF\/classes\/nome_do_arquivo.properties&quot;;\n        try {   \/\/Tento recuperar as informa\u00e7\u00f5es do arquivo de propriedades        \n\n\t\t\t\/\/Apenas para testar imprimo o diret\u00f3rio atual do meu arquivo properties\n\t\t\tSystem.out.println(atualDir);\n\t\t\t\/\/Crio uma inst\u00e2ncia de File passando o meu arquivo .properties via construtor\n            File file = new File(atualDir);\n\t\t\t\/\/Agora crio uma inst\u00e2ncia de FileInputStream passando via construtor o objeto file instanciado acima\n            FileInputStream fileInputStream = new FileInputStream(file);\n\t\t\t\/\/Leio o fileInputStream recuperando assim o mapa contendo chaves e valores\n            prop.load(fileInputStream);\n\t\t\t\/\/Fecho o fileInputStream\n            fileInputStream.close();\n        } catch (Exception e) {\n\t\t\t\/\/Trato poss\u00edveis exce\u00e7\u00f5es\n        }\n        return prop;\n\t\t\/\/Retorno um objeto prop com o mapa correspondente ao meu arquivo properties\n    }\n\n}\n<\/pre>\n<p>Aqui acessamos as propriedades lidas do arquivo em outra classe da aplica\u00e7\u00e3o.<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\n\/*Agora de qualquer classe que possa importar a PropertiesLoader podemos recuperar\nas informa\u00e7\u00f5es do .properties apenas passando a chave voc\u00ea receber\u00e1 o valor. Depois\nbasta converter os resultados da forma que mais lhe convier.\nPara recuperar dados do tipo boolean podemos fazer assim Boolean.parseBoolean(),\nInteger com um Integer.parseInt(), j\u00e1 uma informa\u00e7\u00e3o do tipo String basta apenas um .toString()\n*\/\nsmtp = PropertiesLoader.propertiesLoader().getProperty(&quot;smtp&quot;).toString();\nporta = Integer.parseInt(PropertiesLoader.propertiesLoader().getProperty(&quot;porta&quot;));\nssl = Boolean.parseBoolean(PropertiesLoader.propertiesLoader().getProperty(&quot;ssl&quot;));\n<\/pre>\n<p>Bom pessoal como podem ver \u00e9 muito simples ler configura\u00e7\u00f5es em arquivos properties. Qualquer d\u00favida, postem a\u00ed.<\/p>\n<h2>Treinamentos relacionados com este post<\/h2>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_java\" target=\"_blank\" rel=\"noopener\"><\/p>\n<p><img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0  AWS com Spring Boot 3, Java e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/07-rest-spring-java.png\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_microservices_java\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microservices do 0 com Spring Cloud, Spring Boot e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/14-microservices-java.png\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_rest_spring_kotlin\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"REST API's RESTFul do 0 \u00e0 AWS com Spring Boot 3, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/18-rest-spring-kotlin.png\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_ms_kotlin\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Microsservi\u00e7os do 0 com Spring Cloud, Kotlin e Docker\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/22-ms-kotlin.png\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker do 0 \u00e0 Maestria: Cont\u00eaineres Desmistificados mais 3 B\u00d4NUS\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/09-docker.png\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_docker_para_aws\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Docker para Amazon AWS Implante Apps Java e .NET com Travis CI\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/10-docker-to-aws.png\"><br \/>\n<\/a><\/p>\n<p><a href=\"https:\/\/pub.erudio.com.br\/kr\/blog_kotlin\" target=\"_blank\" rel=\"noopener\"><br \/>\n        <img decoding=\"async\" style=\"max-width: 100%;\" title=\"Kotlin para DEVs Java: Aprenda a Linguagem Padr\u00e3o do Android\" src=\"https:\/\/raw.githubusercontent.com\/leandrocgsi\/blog-images\/main\/20-kotlin.png\"><br \/>\n<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quem trabalha com desenvolvimento Java certamente j\u00e1 teve contato e\/ou vez ou outra teve que configurar arquivos com a extens\u00e3o&nbsp;.properties. Esses arquivos s\u00e3o muito uteis quando precisamos configurar propriedades de algum sistema de forma que n\u00e3o seja via banco e nem fique preso as classes Java. Quando um arquivo .properties \u00e9 lido por classes Java [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[12,49],"tags":[133,176],"_links":{"self":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/267"}],"collection":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/comments?post=267"}],"version-history":[{"count":2,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/267\/revisions"}],"predecessor-version":[{"id":1558,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/posts\/267\/revisions\/1558"}],"wp:attachment":[{"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/media?parent=267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/categories?post=267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.erudio.com.br\/blog\/wp-json\/wp\/v2\/tags?post=267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}