FileNotFoundException, wenn Datei vorhanden ist mit allen Berechtigungen [Duplikat]
-
22-09-2019 - |
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
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)