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:
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”);
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:
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.
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
jwcunha
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.
publicclassTestLogic{@InprivateServletContextservletContext;publicprocessaArquivo(){FileInputStreamfis=null;try{fis=newFileInputStream(this.servletContext.getRealPath("/")+"/web/file001.txt");}catch(FileNotFoundExceptione1){// TODO Auto-generated catch blocke1.printStackTrace();}}}