Acessar um arquivo [resolvido]

4 respostas
J

Olá a todos, estou em uma app utilizando vRaptor e em um dos meus controladores, preciso acessar um arquivo que está em um subdiretório de web. Minha estrutura de diretórios é a seguinte:

-src //fontes java
–logic
—classeLogic.java
.
.
.
-web //arquivos jsp, css, js…
–classe001
—files
----f001.txt
----f002.txt

Preciso acessar de classeLogic.java o arquivos que estão no sub dir files, como f001.txt e f002.txt.

Tentativas:

fis = new FileInputStream("/web/classe001/files/f001.txt");

fis = new FileInputStream("/files/classe001/f001.txt");

fis = new FileInputStream(“files/classe001/f001.txt”);

Sem sucesso, alguém sabe alguma forma? Valeu!

4 Respostas

T

Se seus arquivos estivessem sob “WEB-INF/classes” você poderia usar Thread.currentThread().getClassLoader().getResourceAsStream (“file001.txt” ou coisa parecida.

Jair_Rillo_Junior

O que eu já usei várias vezes e funcionou, é pegar o Path completo da aplicação. Porém para isso, você precisa utilizar um Servlet e implementar o método init(ServletConfig)

Dentro desse método, você pode pegar o path da aplicaçao, algo assim:

public void init(ServletConfig config) throws ServletException {
        System.out.println(config.getServletContext().getRealPath("/"));
    }

Assim, você pode armazenar esse valor em alguma variavel static por exemplo, ou armazenar na sessão, sei la, e na hora de abrir o arquivo, você utiliza o caminho completo dele.

Espero ter ajudado

marciosc

No JSF faço assim:

String realPath = ((HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRealPath("");

A partir dai tenho o contexto da minha aplicação e posso acessar qlqr arquivo dentro dela!
No seu caso ficaria, se eu nao me engano

fis = new FileInputStream(realPath + "/classe001/files/f001.txt");
J

Obrigado a todos pela ajuda e fica aqui a solução final:

Lembrando que estou utilizando o vRaptor, assim para acessar o servlet context precisei fazer uma IoC para dentro do controlador utilizando a notação @In.

public class TestLogic{

    @In
    private ServletContext servletContext;
    

    public processaArquivo(){
        FileInputStream fis = null;
		try {			
			fis = new FileInputStream(this.servletContext.getRealPath("/")+"/web/file001.txt");			
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
    }
}

Este é só um fragmento do código.

Valeu mais uma vez à comunidade!!!

Criado 15 de maio de 2007
Ultima resposta 15 de mai. de 2007
Respostas 4
Participantes 4