2010-02-22 4 views
10

Je suis en train de lire un fichier et l'erreur que je reçois estFileNotFoundException lorsque le fichier existe avec comme indiqué ci-dessous toutes les autorisations

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) 

mais le fichier existe et juste vérifier je lui ai donné 777 autorisations,:

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 

Des idées sur les raisons pour lesquelles j'obtiens l'exception FNF?

Merci

code java qui fait l'appel:

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

Le fichier de propriétés se lit ainsi:

raise_ratio=4 

Cela a été testé dans les fenêtres (avec un diff pathToConfiguration (qui est passé dans le constructeur)) et fonctionne bien.

Ajouté dans les contrôles suivants dans le bloc 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 sortie est la suivante:

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

Pouvez-vous coller le code Java réel? – Martin

+0

Quel code utilisez-vous lorsque l'exception est levée? Que se passe-t-il si vous utilisez file.exists()? file.getAbsolutePath()? file.canRead/Write/Execute()? – Pops

+0

Courez-vous votre code java sur la même machine où le fichier existe? –

Répondre

19

Selon le stacktrace initial, il semble y avoir deux espaces entre le nom du fichier et de la raison:

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

Cela me indique que le nom de fichier a peut-être un espace de fuite.Pouvez-vous vérifier votre variable pathToConfiguration par:

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

Pour vérifier que le chemin est ce que vous pensez qu'il est?

+0

Faites-moi savoir si c'était juste une faute de frappe, si oui, je vais supprimer cette réponse. – beny23

+0

@beny: Même si cela s'avère être faux pour ce cas particulier, bonne idée. – Pops

+2

@beny - yeux d'aigle là-bas ... – Thimmayya

0

Lorsque vous exécutez votre programme java Courez-vous comme le même « utilisateur » comme lorsque vous exécutez les vérifications de ligne de commande?

EDIT: Essayez de copier le fichier dans le répertoire d'où vous exécutez votre programme et voyez s'il est capable de le lire. Vous pouvez également essayer ce qui suit après avoir copié le fichier dans votre répertoire d'exécution:

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

(en supposant que vous avez dans votre classpath « »)

+0

oui, en tant qu'utilisateur at1106 – Aly

+0

Aly, pouvez-vous confirmer que System.getProperty ("user.name") donne à 1106? –

0

Je suppose que vous revérifié le chemin plus d'une fois, et comme vous dites que vous exécutez l'application sur la même machine où réside le code.

Est-il possible que certains montages de serveur de fichiers/NFS soient valides uniquement pour le shell de connexion, mais pas pour les applications? Essayez de copier le fichier dans votre $ HOME et voyez si cela fonctionne.

+0

J'ai réussi à copier le fichier à $ HOME – Aly

+0

et ...? Est-ce que ça marche? – lorenzog

0

Ce qui est si vous écrivez émis ceci:

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

quel est votre répertoire en cours?

+0

ceci: /homes/at1106/fourthYearComputing/Projet Induvidual/svn-workspace/trunk/Induvidual_Project /. – Aly

+0

Votre fichier existe-t-il dans ce dossier? – Geo

+0

non, mais quand je crée le fichier je le fais avec le chemin absolu – Aly