Domanda

    

Questa domanda ha già una risposta qui:

         

Sto cercando di leggere un file e l'errore che ottengo è

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)

tuttavia il file non esiste e solo per ricontrollare ho dato 777 permessi, come illustrato di seguito:

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

Tutte le idee sul perché sto ottenendo l'eccezione FNF?

Grazie

codice Java che effettua la chiamata:

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

Il file delle proprietà si legge:

raise_ratio=4

Questo è stato testato in Windows (con un pathToConfiguration diff (che è passato al costruttore)) e funziona bene.

Aggiunta nelle seguenti controlli nel blocco 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");
        }

l'uscita è la seguente:

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

Soluzione

Secondo lo stacktrace iniziale, sembra che vi siano due spazi tra il nome del file e la ragione:

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

Questo indicherebbe a me che il nome del file, eventualmente, ha uno spazio finale. Si può controllare due volte la variabile pathToConfiguration da:

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

Per controllare due volte che il percorso è quello che si pensa che è?

Altri suggerimenti

Credo che si fa doppio controllato il percorso più di una volta, e come dici tu si esegue l'applicazione sulla stessa macchina in cui risiede il codice.

E 'possibile che ci sono alcuni supporti / file server NFS oscuri che sono validi solo per la shell di login, ma non per le applicazioni?

Provare a copiare il file nella $ HOME e vedere se funziona.

Ciò che viene emesso se si scrive questo:

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

che cosa è la directory corrente?

Quando si esegue il programma Java sono in esecuzione come lo stesso 'utente' come quando si esegue i controlli della riga di comando?

Modifica : Provare a copiare il file nella directory in cui si esegue il programma da e vedere se è in grado di leggerlo. È anche possibile provare il seguente testo dopo la copia il file nella directory di esecuzione:

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

(ammesso che abbiate "" nel classpath)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top