2010-02-22 16 views
10

Estoy tratando de leer un archivo y el error que recibo esFileNotFoundException cuando el archivo existe con todos los permisos

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 simplemente comprobar lo di 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 de 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 en el constructor)) y funciona bien.

Agregado en los siguientes controles 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 
+1

¿Se puede pegar el código real de Java? – Martin

+0

¿Qué código está ejecutando cuando se lanza la excepción? ¿Qué sucede si usa file.exists()? file.getAbsolutePath()? file.canRead/Write/Execute()? – Pops

+0

¿Está ejecutando su código java en la misma máquina donde existe el archivo? –

Respuesta

19

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.Puede que vuelva a comprobar la variable de pathToConfiguration por:

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

comprobar que el camino es lo que creo que es?

+0

. Avíseme si fue solo un error tipográfico, de ser así eliminaré esta respuesta. – beny23

+0

@beny: Incluso si esto resulta ser incorrecto para este caso particular, gran idea. – Pops

+2

@beny - ojos de águila allí ... – Thimmayya

0

Al ejecutar el programa Java es usted que funciona como el mismo 'usuario' como cuando ejecuta las verificaciones de línea de comando?

EDIT: Intente copiar el archivo al directorio donde ejecuta el programa y vea si puede 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 su ruta de clases "")

+0

sí, como el usuario at1106 – Aly

+0

Aly, ¿puede confirmar que System.getProperty ("user.name") produce at1106? –

0

supongo que se verificó dos veces la ruta más de una vez, y como dices que estás ejecutando la aplicación en la misma máquina donde reside el código.

¿Podría ser que haya algunos montajes oscuros de servidor de archivos/NFS que sean válidos solo para el shell de inicio de sesión pero no para las aplicaciones?

Intente copiar el archivo en su $ HOME y vea si funciona.

+0

Logré copiar el archivo a $ HOME – Aly

+0

y ...? ¿Funciona? – lorenzog

0

Lo que se emite si se escribe esto:

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

¿cuál es su directorio actual?

+0

esto: /homes/at1106/fourthYearComputing/Induvidual-Project/svn-workspace/trunk/Induvidual_Project /. – Aly

+0

¿Su archivo existe en esa carpeta? – Geo

+0

no, pero cuando creo el archivo, lo hago con la ruta absoluta – Aly

Cuestiones relacionadas