Frage

    

Diese Frage bereits eine Antwort hier:

         

Ich versuche, eine Datei zu lesen und den Fehler ich erhalte, ist

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)

jedoch die Datei vorhanden ist und nur zu überprüfen gab ich es 777 Berechtigungen, wie unten dargestellt:

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

Alle Ideen, warum ich die FNF Ausnahme bin immer?

Danke

Java-Code, der den Anruf tätigt:

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

Die Eigenschaftendatei lautet:

raise_ratio=4

Dies wurde in Windows getestet (mit einer diff pathToConfiguration (die in den Konstruktor übergeben wird)) und funktionieren gut.

Veröffentlichte in den folgenden Prüfungen in dem Catch-Block

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

wird die Ausgabe wie folgt:

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

Lösung

Nach dem ursprünglichen stacktrace erscheinen dort zwei Leerzeichen zwischen dem Dateinamen und der Vernunft sein:

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

Das würde mir zeigen, dass der Dateiname möglicherweise ein Leerzeichen hat. Können Sie das Doppelte Ihres pathToConfiguration Variablen überprüfen:

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

Um überprüfen, dass der Weg ist das, was Sie denken, es ist?

Andere Tipps

Ich nehme an, Sie doppelte Pfadname mehr geprüft als einmal, und wie Sie sagen, Sie laufen die App auf dem gleichen Computer, auf dem der Code befindet.

Könnte es sein, dass es einige obskure NFS / Dateiserver Halterungen, die nur für die Login-Shell gültig sind, aber nicht für die Anwendungen?

Versuchen Sie die Datei in Ihrem $ HOME Kopieren und sehen, ob es funktioniert.

Was ausgegeben wird, wenn Sie schreiben diese:

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

Was ist Ihr aktuelles Verzeichnis?

Wenn Sie Ihr Java-Programm ausführen werden Sie es als das gleiche ‚Benutzer‘ ausgeführt wird, wie wenn Sie die Befehlszeilenprüfungen durchführen?

Bearbeiten : Versuchen Sie, die Datei in das Verzeichnis zu kopieren, wo Sie Ihr Programm ausführen aus und sehen, ob es in der Lage ist, es zu lesen. Sie können auch die folgende versuchen nach der Datei auf dem Ausführungsverzeichnis kopiert:

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

(vorausgesetzt, Sie haben "" in Ihrem Classpath)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top