Ler arquivo na aplicação web

2 respostas
Y

Galera, o meu problema parece ser bem simples, mas não consigo encontrar a solução. :?

Tpw, numa aplicação bem simples que estou fazendo, apenas com propósito de prática, crie uma classe que é responsável por ler um arquivo, capturar um objeto dele, e então carregar algumas propriedades. Acontece que não consigo configurar o path do arquivo.

A classe para leitura é a seguinte:

package ym.util.db;

import java.io.File;
import java.io.ObjectInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import java.util.Properties;

public final class DatabaseConfig
  {
   private Properties configs;

   public DatabaseConfig(File config) throws IllegalArgumentException, IOException
     { read(config); }

   public String get(String item)
     { return ((configs.getProperty(item) != null) ? configs.getProperty(item) : new String()); }

   public String driver()
     { return get("databaseDriver"); }

   public String url()
     { return get("databaseUrl"); }

   public String username()
     { return get("databaseUsername"); }

   public String password()
     { return get("databasePassword"); }

   private void read(File config) throws IllegalArgumentException, IOException
     {
      try
        {
         ObjectInputStream file = new ObjectInputStream(new FileInputStream(config));
         configs = (Properties) file.readObject();
        }
      catch(ClassNotFoundException e)
        { throw new IllegalArgumentException("File content no database config."); }
      catch(Exception e)
        { throw new IOException("Exception when reading config file - " + e.getMessage()); }
     }
  }

Como parâmetro eu passo um objeto File que “deveria” conter o arquivo. O arquivo é config.dat.

Então uso:

DatabaseConfig dc = new DatabaseConfig(new File("config.dat"));

Mas sempre retorna o erro:

java.io.IOException
Exception when reading config file - config.dat (O sistema não pode encontrar o arquivo especificado)

Então tentei mudar o path para /config.dat, assim:

DatabaseConfig dc = new DatabaseConfig(new File("/config.dat"));

Mas o mesmo erro ocorre. Já tentei colocar o config.dat tanto na pasta raíz da aplicação quanto na pasta WEB-INF/classes, mas o erro persiste em ambas.

Com quase certeza de que o erro estava no path, resolvi criar um pequeno arquivo para testes. Uma página JSP na pasta raíz da aplicação, usando o mesmo comando: File file = new File(“config.dat”)
E fiz getters nesse objeto File para obter informações:

getAbsoluteFile()
getAbsolutePath()
getCanonicalFile()
getCanonicalPath()

E todos eles retornaram: C:\config.dat

Ou seja, se eu especificar somente o nome do arquivo, este é mapeado a partir do C:, mesmo que eu use uma barra (/config.dat). Eu quero saber como eu faço para que essas classes façam referência a um arquivo a partir do path da própria aplicação, um path relativo. Pq é claro que não é nem um pouco bom usar um path absoluto.

Alguém poderia me ajudar?

2 Respostas

L

Cara, o arquivo que você quer ler é no servidor onde está rodando ou no computador do cliente que esta acessando?

Y

É no servidor. Na pasta da própria aplicação.

Criado 7 de janeiro de 2007
Ultima resposta 9 de jan. de 2007
Respostas 2
Participantes 2