Criar arquivo (File) em uma pasta dentro do Webcontent

Pessoal,

Li algumas coisas por ai, mas não entendi direito o processo…

Uso o método para criar o arquivo:

[code] public File NomeExcelRelatorio(String login) {

   	//ADICIONA DATA/HORA NO ARQUIVO GERADO
	GregorianCalendar calendar = new GregorianCalendar();   
    SimpleDateFormat formatador = new SimpleDateFormat("dd' de 'MMMMM' de 'yyyy");     
        	
    File dir = new File("arquivoUpload");
    
	if (dir.mkdir()) {
		System.out.println("Diretório criado com sucesso!");
	}
    
    File arq = new File(dir, login+"_Relatorio_Atual - "+formatador.format(calendar.getTime())+".xls");

	return arq;

}[/code]

Gero o arquivo belezinha… mas em um diretório dentro do diretório do Eclipse… e no Windows ou no Linux ele cria aleatoriamente em algum lugar.

Queria já deixar um diretório dentro do webContent --> Diretório
e ai gravar esse arquivo lá…

Sei que é um assunto que tem bastante coisa por ai, mas eu queria um modo de aprender melhor…

Cara, eu uso da seguinte forma para definir o path(diretório):

FileOutputStream outputStream; try { outputStream = new FileOutputStream("C:/path"); outputStream.write(arquivo.getBytes(), 0, arquivo.getBytes().length); outputStream.close();

o problema Eiro que não quero C:/ … queria direto dentro do webcontent, para não depender do sistema operacional do cliente…

acho que usando isso é universal:

System.getProperty("user.dir") + "/src/...

Não deu certo… não consegui apontar para um diretório dentro do webcontent…

[code]
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;

     String scheme = request.getScheme();
    String serverName = request.getServerName();
    int portNumber = request.getServerPort();
    String contextPath = request.getContextPath();
    String servletPath = request.getServletPath();
    String pathInfo = request.getPathInfo();
    String query = request.getQueryString();[/code]

Oi alexafe…

Mas como trataria? vc poderia me dar uma explicação destes métodos???

Essa pasta webcontent faz parte do padrão de projeto web em java, vc teria que ter um controller com um metodo recebendo o request do navegados assim vc teria acesso a esses objetos e metodos. vc vai ver que cara metodo retorna um detalhe sobre o caminho fisico do projeto

O caminho é esse ai que o alexafe falou. Na API Servlet você consegue recuperar informações sobre o caminho onde a aplicação está rodando no servidor.

Só lembrar de um detalhe: Essa pasta “WebContent” na verdade é um padrão de projeto fonte do Eclipse. Em tempo de execução ela não vai existir. Na verdade tudo que fica dentro dela fica na raiz do projeto WEB, junto com o diretório WEB-INF.

Então não espere usar um daqueles métodos e ver algum path retornando com “WebContent” no meio, já que quando seu projeto for empacotado e jogado no servidor ela não vai existir mais.

entendi pessoal, obrigado pelas respostas…

Vcs teriam alguma sugestão? pois preciso criar um diretório para guardar os arquivos processados…

Você quer que esse arquivo fique visível para ser acessado como recurso web? Tipo digitando o caminho dele no navegador? Como se faz com imagens normalmente.

:slight_smile:

Enfim, se você quer o diretório raiz de onde a aplicação está rodando no servidor, é só fazer isso aqui (JSF):

String path = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/");

não precisa de acessar por web… só a aplicação… para pegar apenas… (botão download)

Muito obrigado mesmo pelas dicas

Pessoal, ainda não sei qual melhor solução para isso… eu crio um arquivo excel e faço o download por um botão e depois exclui do diretório… mas no Chrome não funciona… MAS, só no servidor, pois local funciona

[code]HttpSession session = request.getSession();
NomeArquivoExcel arquivoExcel = new NomeArquivoExcel();
File arq = arquivoExcel.NomeExcelRelatorio((String) session
.getAttribute(“loginUsuario”));

	        if(!arq.exists()){
	        	
	        	// ENTRA AQUI COMO SE NÃO HOUVESSE ARQUIVO
	    		request.setAttribute("msgRetornoMedicao", msgRetornoMedicao);
	    		request.getRequestDispatcher("erro.jsp").forward(request, response);[/code]

Não está criando o arquivo… mas local cria de boa… no IE cria nos dois ambientes