Pegar caminho da aplicação

8 respostas
R

Pessoal, preciso pegar o caminho da minha aplicação pra salvar um arquivo mas não dá certo, tentei os seguintes métodos:

new File(".").getCanonicalPath();

e

System.getProperty("user.dir")

Rodando como aplicação web ambos retornam o caminho que o Eclipse se encontra:
C:\Users\Romario\Desktop\Desenvolvimento\eclipse

Rodando com um método Main retornam o caminho corretamente:
C:\Users\Romario\workspace\Projeto

Alguém sabe o por que disso? e como eu faço pra pegar o caminho correto executando com o servidor de aplicação?

Desde já agradeço!

8 Respostas

L

Creio que você precisa de algo parecido com isso

String pathSystem = request.getRealPath(request.getServletPath()); String pathC = new File(pathSystem).getParent();

R

Leandro M.:
Creio que você precisa de algo parecido com isso

String pathSystem = request.getRealPath(request.getServletPath()); String pathC = new File(pathSystem).getParent();

Não deu certo brother, tentei assim:

FacesContext facesContext = FacesContext.getCurrentInstance();    
ServletContext request = (ServletContext) facesContext.getExternalContext().getContext();  
String pathSystem = request.getRealPath(request.getContextPath()); 	
String pathC = new File(pathSystem).getParent();

e bateu na trave, veja o retorno:

[b]C:\Users\Romario\workspace[/b][u].metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps[/u]Projeto

A ideia é pegar apenas a parte em negrito:
C:\Users\Romario\workspace\Projeto

L

Dessa forma aqui funciona

FacesContext conext = FacesContext.getCurrentInstance(); HttpServletRequest request = (HttpServletRequest) conext.getExternalContext().getRequest(); String pathSystem = request.getRealPath(request.getContextPath()); String pathC = new File(pathSystem).getParent();

L

Ou somente este

FacesContext conext = FacesContext.getCurrentInstance(); HttpServletRequest request = (HttpServletRequest) conext.getExternalContext().getRequest(); String pathSystem = request.getRealPath(request.getContextPath());

R

Leandro M.:
Ou somente este

FacesContext conext = FacesContext.getCurrentInstance(); HttpServletRequest request = (HttpServletRequest) conext.getExternalContext().getRequest(); String pathSystem = request.getRealPath(request.getContextPath());

Continua retornando:
C:\Users\Romario\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Projeto

R

Alguém? =x

E

Dica: em Java é muito desajeitado você gravar algum arquivo (como o de configuração) juntamente com o caminho de sua aplicação.

Se for uma configuração “por usuário” você pode usar a API de Preferences, http://docs.oracle.com/javase/7/docs/api/java/util/prefs/Preferences.html

Se for um arquivo que deve ser gravado pelo programa, não faça isso de jogar o arquivo junto com o caminho da sua aplicação, porque você não deve ter as permissões adequadas. Por exemplo, o programa da Receita Federal, que é em Java, grava as declarações de impostos em um diretório “C:\Arquivos de Programas SRF” (que tem as permissões completas de escrita e leitura dadas na hora de instalação do programa) em vez de usar o diretório “c:\Arquivos de Programas”, justamente porque esse diretório, assim como seus subdiretórios, não tem permissões de escrita, só de leitura.

R

entanglement:
Dica: em Java é muito desajeitado você gravar algum arquivo (como o de configuração) juntamente com o caminho de sua aplicação.

Se for uma configuração “por usuário” você pode usar a API de Preferences, http://docs.oracle.com/javase/7/docs/api/java/util/prefs/Preferences.html

Se for um arquivo que deve ser gravado pelo programa, não faça isso de jogar o arquivo junto com o caminho da sua aplicação, porque você não deve ter as permissões adequadas. Por exemplo, o programa da Receita Federal, que é em Java, grava as declarações de impostos em um diretório “C:\Arquivos de Programas SRF” (que tem as permissões completas de escrita e leitura dadas na hora de instalação do programa) em vez de usar o diretório “c:\Arquivos de Programas”, justamente porque esse diretório, assim como seus subdiretórios, não tem permissões de escrita, só de leitura.

Pois é, estava querendo fazer dessa forma, porém não sei como exibir uma imagem fora do contexto da aplicação com <p:graphicImage/>.

EDIT: Vou tentar utilizando o StreamedContent do primefaces, alguém sabe de outro método?

Criado 11 de maio de 2013
Ultima resposta 13 de mai. de 2013
Respostas 8
Participantes 3