Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

Estoy intentando leer un archivo y el error que recibo es

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)

Sin embargo el archivo existe y sólo para doble verificación i dio permisos 777, como se muestra a continuación:

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

alguna idea de por qué estoy recibiendo la excepción FNF?

Gracias

código Java que realiza la llamada:

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();    
  }

El archivo de propiedades lee:

raise_ratio=4

Esto fue probado en Windows (con un pathToConfiguration diff (que se pasa al constructor)) y funciona bien.

Añadido en las siguientes comprobaciones en el bloque Catch

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

la salida es la siguiente:

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

Solución

De acuerdo con la StackTrace inicial parece que hay dos espacios entre el nombre del archivo y la razón:

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

Esto indicaría a mí que el nombre del archivo, posiblemente, tiene un espacio al final. ¿Se puede comprobar la variable de doble pathToConfiguration por:

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

Para vuelve a comprobar que el camino es lo que creo que es?

Otros consejos

supongo que marcó el doble de la ruta más de una vez, y como usted dice que está ejecutando la aplicación en la misma máquina donde reside el código.

Podría ser que hay algunos montajes NFS / servidor de archivos oscuros que son válidos sólo para el shell de entrada, pero no para las aplicaciones?

Intente copiar el archivo en tu $ HOME y ver si funciona.

Lo que se emite si se escribe esto:

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

¿cuál es su directorio actual?

Al ejecutar el programa Java está ejecutando como el mismo 'usuario' como cuando se ejecuta las comprobaciones de línea de comandos?

Editar : Intente copiar el archivo en el directorio donde se ejecuta el programa desde y ver si es capaz de leerlo. También puede probar el siguiente después de copiar el archivo en el directorio de ejecución:

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

(suponiendo que tiene "" en la ruta de clase)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top