Criar arquivo (File) em uma pasta dentro do Webcontent

14 respostas
P

Pessoal,

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

Uso o método para criar o arquivo:

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;

	}

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...

14 Respostas

E

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();

P

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

E

acho que usando isso é universal:

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

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

A
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();
P

Oi alexafe…

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

A

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

R

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.

P

entendi pessoal, obrigado pelas respostas…

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

R

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.

A

:slight_smile:

R

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("/");
P

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

Muito obrigado mesmo pelas dicas

P

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

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);

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

Criado 16 de outubro de 2014
Ultima resposta 4 de nov. de 2014
Respostas 14
Participantes 4