Caminho para FileInputStream

Olá pessoal,

estou querendo carregar um arquivo txt com FileInputStream, porem estou tendo que informar o caminhos completo:

FileInputStream fin = new FileInputStream("c:/pasta/arquivo.txt");

gostaria de poder informar somente o nome do arquivo:

FileInputStream fin = new FileInputStream("arquivo.txt");

Como fazer ?

Olá,
é só você colocar seu arquivo.txt dentro de alguma pasta dentro de seu projeto por exemplo:

/ (Pasta raiz do projeto)
/src (Seus arquivos JAVA estão aqui dentro)
/docs (Pasta que conterá os TXTs)

agora para abrir o arquivo:

FileInputStream fin = new FileInputStream(“docs/arquivo.txt”);

Espero ter ajudado. [ HcK ]

Olá Tiago,
infelizmente não deu certo. Fiz varias tentativa criando a pasta “docs” em varios lugares, mas o servlet não acho o arquivo.

A estrutura da pasta das classe é aplicação\WEB-INF\classes
não tenho essa pasta scr. Estou usando Windows

Você pode descobrir onde a pasta “/docs” está.

Tente fazer o programinha:

System.out.println(new File("/docs").getCanonicalPath());

Ele te mostrará o caminho que o Java assume para essa pasta.

Pegue uma referência do ServletContext (getServletContext() da classe HttpServlet) e depois use o método getResource(String). Assim você terá acesso a qualquer recurso dentro da sua aplicação. Ex:

Quero o teste.txt que está dentro do diretório WEB-INF/docs

getResource(/WEB-INF/docs/teste.txt);

Até mais.

Olá Guilherme,

voce poderia mostra um exemplo de como fazer dessa forma que voce está sugerindo ?

Dentro de seu servlet substitua:

por:

sendo que arquivo.txt tem que estar na raiz da sua aplicação, ao lado da pasta WEB-INF. Consulte também na documentação o método getResourceAsStream() da classe ServletContext.

Até mais…

Quando dentro de um Servlet, Ok, consigo mesmo acessar pelos métodos fornecidos por ele, mas como faço por exemplo para obter o caminho real para um arquivo xml que está em /WEB-INF/classes em uma classe não-servlet. Estou criando um DAO baseado em xml mas não encontra o arquivo para realizar o parser:

public XmlHistoriaDAO() throws IOException, JDOMException { SAXBuilder builder = new SAXBuilder(); Document document = builder.build("/WEB-INF/classes/Historia.xml"); root = document.getRootElement(); }

O código acima me dispara uma IOException

Com isso eu consigo pegar o caminho correto para o arquivo informando o caminho relativo.

[code]public XmlHistoriaDAO() throws IOException, JDOMException {
InputStream in = getClass().getResourceAsStream("…/…/…/…/Historia.xml");

     SAXBuilder builder = new SAXBuilder();
     Document document  = builder.build(in);
     root = document.getRootElement();
 }[/code]

Para escrever no arquivo fiz o seguinte:

[code] public void update(Historia historia) throws IOException, JDOMException {
Element element;
URI uri;
File file;
FileOutputStream fout;
XMLOutputter serializer;

    try {
        element = root.getChild("texto");
        element.setText(historia.getTexto());   
        
        String arquivo = "../../../../../Historia.xml";
        uri  = getClass().getResource(arquivo).toURI(); // toURI() pode ser substituido por toString()

        file = new File(uri);  
        fout = new FileOutputStream(file);
        
        serializer = new XMLOutputter(); 
        serializer.output(document, fout);
        
        fout.flush();
        fout.close(); 
    }
    catch (URISyntaxException e) { 
        System.out.println("Caminho para arquivo Historia.xml invalido");
    }
}[/code]

Aproveitei a carona ai…

tinha a mesma dúvida e agora está resolvido. :lol:

Na verdade tenho mais uma dúvida: Tem como descobrir a URL completa apartir de uma classe não servelet? :?

Obrigado

Eu estava com o mesmo problema do Carlos Geiser e consegui resolver colocando o método abaixo na minha classe servlet:[code]
import java.io.FileInputStream;
import java.util.Properties;

private static String lerProperties(String variavel) {

	String valor = null;
    try {
        FileInputStream file = new FileInputStream(Thread.currentThread().getContextClassLoader().getResource("nomedosuearquivo.properties").getPath());
        Properties hosts = new Properties();
        hosts.load(file);
        valor = hosts.getProperty(variavel);
        file.close();
    } catch (Exception ex) {
        ex.printStackTrace(System.out);
    }
    return valor;
}[/code]

Desta forma o nomedosuearquivo.properties pode ser colocado em qualquer pasta do projeto, no meu caso coloquei em /WEB-INF/classes/arquivo.properties!

para criar um arquivo.properties no eclipse clique com o botão direito em qualquer pasta dentro do projeto escolha new >>> file >>> coloque o nome do arquivo sempre com a extensão .properties.

Depois de criado coloque os valores que quiser dentro do arquivo da seguinte forma:

teste1=8554555
teste2=123456

para ler estes valores basta chamar o método lerProperties() postado na mensagem anterior da seguinte forma:

lerProperties(“teste1”);
lerProperties(“teste2”);