Pergunta

Esta pergunta já tem uma resposta aqui:

Estou tentando ler um arquivo e o erro que recebo é

java.io.FileNotFoundException: /homes/at1106/fourthYearComputing/Individual-Project/svn-workspace/trunk/Individual_Project/src/game/player/gametheoryagent/configurations/gameTheoryAgentConfiguration.properties  (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at game.player.gametheoryagent.GameTheoryAgent.<init>(GameTheoryAgent.java:67)
        at simulation.Simulator.createPlayer(Simulator.java:141)
        at simulation.Simulator.main(Simulator.java:64)

No entanto, o arquivo existe e apenas para verificar novamente, dei 777 permissões, como mostrado abaixo:

tui% cd /homes/at1106/fourthYearComputing/Individual-Project/svn-workspace/trunk/Individual_Project/src/game/player/gametheoryagent/configurations
tui% ls -al
total 4
drwxrwxrwx 3 at1106 cs4 1024 2010-02-22 17:45 .
drwxrwxrwx 4 at1106 cs4 1024 2010-02-22 17:27 ..
-rwxrwxrwx 1 at1106 cs4  260 2010-02-22 17:31 gameTheoryAgentConfiguration.properties
drwxrwxrwx 6 at1106 cs4 1024 2010-02-22 17:41 .svn

Alguma idéia de por que estou recebendo a exceção da FNF?

Obrigado

Código Java que faz a chamada:

File file = new File(pathToConfiguration)
   Properties configuration = new Properties();
    try{
        configuration.load(new FileInputStream(file));
        int RAISE_RATIO = Integer.parseInt(configuration.getProperty("raise_ratio"));
    }
    catch(IOException event){
        System.err.println("Error in reading configuration file " + pathToConfiguration);
        event.printStackTrace();    
  }

O arquivo de propriedades diz:

raise_ratio=4

Isso foi testado no Windows (com um Diff PathToconfiguration (que é passado para o construtor) e funciona bem.

Adicionado nas verificações a seguir no bloco de captura

        if(file.exists()){
            System.out.println("file exists");
        }
        else{
            System.out.println("file doesn't exist");
        }

        System.out.println(file.getAbsolutePath());
        if(file.canRead()){
            System.out.println("can read");
        }
        if(file.canWrite()){
            System.out.println("can write");
        }

A saída é a seguinte:

file doesn't exist
/homes/at1106/fourthYearComputing/Individual-Project/svn-workspace/trunk/Individual_Project/src/game/player/gametheoryagent/configurations/gameTheoryAgentConfiguration.properties
Foi útil?

Solução

De acordo com o Stacktrace inicial, parece haver dois espaços entre o nome do arquivo e o motivo:

FileNotFoundException: ...Configuration.properties  (No such file or directory)
--------------------------------------------------^^

Isso indicaria para mim que o nome do arquivo possivelmente tem um espaço à direita. Você pode verificar sua variável PathToconfiguration por:

System.out.println("[" + pathToConfiguration + "]");

Para verificar se o caminho é o que você acha que é?

Outras dicas

Suponho que você verificou o nome do caminho mais de uma vez e, como você diz, está executando o aplicativo na mesma máquina em que o código reside.

Será que existem alguns suportes obscuros de NFS/Arquivo que são válidos apenas para o shell de login, mas não para os aplicativos?

Tente copiar o arquivo em sua casa e veja se funciona.

O que é produzido se você escrever isso:

System.out.println(new File(".").getAbsolutePath());

Qual é o seu diretório atual?

Quando você executa seu programa Java, você o executa como o mesmo 'usuário' que quando executa as verificações da linha de comando?

EDITAR: Tente copiar o arquivo para o diretório de onde você executa seu programa e veja se ele é capaz de lê -lo. Você também pode tentar o seguinte depois de copiar o arquivo para o seu diretório de execução:

InputStream in = getClass().getResourceAsStream("/gameTheoryAgentConfiguration.properties");
configuration.load(in);

(assumindo que você tem "." Em seu caminho de classe)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top