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!
Se seus arquivos estivessem sob “WEB-INF/classes” você poderia usar Thread.currentThread().getClassLoader().getResourceAsStream (“file001.txt” ou coisa parecida.
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
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");
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!!!