Ler arquivo Linux X Windows

11 respostas
E

Estou tentando ler um arquivo “Properties” a partir de um diretorio no Linux.

O arquivo está dentro do contexto de uma aplicacao no tomcat.

Ex: tomcat/app/WEB-INF/diretorio/arquivo.properties

Criei um objeto “File” para armazenar o conteudo do arquivo. Para isso indiquei como caminho “…/WEB-INF/diretorio/arquivo.properties”

Quando rodo minha aplicacao no Windows, beleza, dá tudo certo, mas quando rodo no linux ocorre uma exceção, a famosa NullPointerException.

Por quê no Linux não funciona?? Como posso resolver o problema??

11 Respostas

Rafael_Steil

Pq ocorre a NPE? qual linha de codigo eh? o arquivo eh encontrado?

Rafael

E

Pelo que eu entendi o arquivo não é encontrado!!

Parece que no Linux o …/ não funciona como no Windows

Rafael_Steil

Post ai a parte relevante de codigo que vc esta usando.

Rafael

E

Segue ai o codigo:

private static void setPropriedadesMail(){
   Properties propsMail = new Properties();
   File file = new File("../WEB-INF/propriedade/mail.properties");    
   FileInputStream is = null;
   try {
           is = new FileInputStream(file);
           //lê os dados que estão no arquivo
           propsMail.load(is);
           is.close();
     }
     catch (IOException ex) {
           System.out.println("Erro " + ex.getMessage());
           ex.printStackTrace();
      }
}

Estou utilizando o Tomcat 4.1.31

Quando utilizo no Windows :arrow: OK
Quanto utilizo no Linux aparece a mensagem NullPointerException acredito que ele não consegue “enxergar” o arquivo, vc tem alguma sugestão??

Obrigado

Rafael_Steil

Bom, a forma como vc esta fazendo eh um pouco fora do comum, ja que voce esta assumindo certas propriedades do ambiente. Uma opcao eh voce criar um diretorio “config” em WEB-INF/classes e usar um codigo como o seguinte para pegar os arquivos:

InputStream in = getClass().getResourceAsStream("/config/mail.properties");

Rafael

E

Uma dúvida, por quê não posso referenciar este arquivo fora do diretorio “classes”, não poderia referenciá-lo no local onde estava antes (fora do diretório “classes”)?
É realmente necessário criar o diretório “config” dentro do diretório “classes” ??

Só gostaria de entender o que acontece!! Dei uma olhada no JavaDoc mas não ficou claro.

De qualquer forma muito obrigado!!

Rafael_Steil

O diretorio pode se chamar qualquer coisa… “config” foi simplesmente para efeitos praticos.
Voce pode referenciar qualquer diretorio em qualquer lugar, desde que tenha permissao para tal. O problema com o teu …/ eh que voce esta assumindo que o diretorio padrao eh “X” sempre, o que opde nao ser verdade dependendo do sistema operacional / container usado / forma de configuracao do mesmo.

Se voce quiser, pode usar o getServletContext().getRealPath("") para pegar o diretorio fisico raiz da tua aplicacao web, e entao adiciopnar o restro da estrutura de diretorios, como em

getServletContext().getRealPath("") + "/WEB-INF/propriedades/arquivo.xxx"

Rafael

E

Rafael,

eu cheguei a utilizar o caminho através do contexto do Servlet mas achei interessante sua sugestão através do método:

InputStream in = getClass().getResourceAsStream("/config/arquivo.xxxx");

A restrição que eu não consegui solucionar, para este caso, foi colocar meu arquivo de propriedades “arquivo.xxxx” em um diretório que não fosse um subdiretório de app/WEB-INF/classes/

Quando meu arquivo.xxx está em algum subdiretório do diretório /classes, a aplicação funciona, quando coloco o arquivo em outro diretório que não um subdiretório de /classes Ex: app/WEB-INF/config/arquivo.xxxx não funciona.

Só gostaria de saber por quê isso ocorre??

O método em destaque neste Post só “enxerga” os arquivos que estão contidos em algum subdiretório de /classes??

Bem, de qualquer forma, a solução resolveu o problema.

Muito obrigado!!

Rafael_Steil

Entao, somente funciona dentro do classes mesmo, que eh um diretorio que esta no classpath. Ate tem uma outra forma de, usando o getResourceAsStream(), “navegar” por uma estrtutura direferente, mas da bastante trabalho e eh sucetivel a erros. Essa maneira como passei eh bastante usada no dia-a-dia, portanto nao eh nenhuma trick.

Rafael

E

Aí Rafael, valeu mesmo, obrigado!!!

Aproveitando a oportunidade, parabéns pelo JForum, é show de bola!!

Vc tem alguma previsão de nova versão do JForum??

[]´s

Rafael_Steil

Erex:

Vc tem alguma previsão de nova versão do JForum??

Estou comecando a testar a 2.1, mas geralmente nao defino uma data. Lanco qdo considero que esta pronto :slight_smile:

Rafael

Criado 14 de fevereiro de 2005
Ultima resposta 16 de fev. de 2005
Respostas 11
Participantes 2