Caminho para FileInputStream

12 respostas
C

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 ?

12 Respostas

tiagosarno

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 ]

C

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

ViniGodoy

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.

G

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.

C

Olá Guilherme,

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

G

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…

asclows

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

asclows

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

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

         SAXBuilder builder = new SAXBuilder();
         Document document  = builder.build(in);
         root = document.getRootElement();
     }
asclows

Para escrever no arquivo fiz o seguinte:

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");
        }
    }
johnnycoppini

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

F
Eu estava com o mesmo problema do Carlos Geiser e consegui resolver colocando o método abaixo na minha classe servlet:
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;
    }

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

F

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

Criado 2 de março de 2007
Ultima resposta 31 de jul. de 2009
Respostas 12
Participantes 7