FileNotFoundException, когда файл существует со всеми разрешениями
-
22-09-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
Я пытаюсь прочитать файл и получаю ошибку:
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)
однако файл существует, и просто для двойной проверки я дал ему права 777, как показано ниже:
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
Есть идеи, почему я получаю исключение FNF?
Спасибо
Java-код, который выполняет вызов:
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();
}
Файл свойств гласит:
raise_ratio=4
Это было протестировано в Windows (с diff pathToConfiguration (который передается в конструктор)) и работает нормально.
Добавлены следующие проверки в блоке 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");
}
вывод следующий:
file doesn't exist
/homes/at1106/fourthYearComputing/Individual-Project/svn-workspace/trunk/Individual_Project/src/game/player/gametheoryagent/configurations/gameTheoryAgentConfiguration.properties
Решение
Согласно исходной трассировке стека, между именем файла и причиной есть два пробела:
FileNotFoundException: ...Configuration.properties (No such file or directory)
--------------------------------------------------^^
Это укажет мне на то, что имя файла, возможно, имеет завершающий пробел.Можете ли вы дважды проверить переменную pathToConfiguration:
System.out.println("[" + pathToConfiguration + "]");
Чтобы дважды проверить, что путь — это то, что вы думаете?
Другие советы
Я предполагаю, что вы дважды проверяли путь более одного раза и, как вы говорите, запускаете приложение на том же компьютере, где находится код.
Может быть, существуют какие-то непонятные монтирования NFS/файлового сервера, которые действительны только для оболочки входа в систему, но не для приложений?
Попробуйте скопировать файл в $HOME и посмотрите, работает ли он.
Что будет выведено, если вы напишете это:
System.out.println(new File(".").getAbsolutePath());
какой у тебя текущий каталог?
Когда вы выполняете свою Java-программу, вы запускаете ее от имени того же «пользователя», что и при проверке командной строки?
РЕДАКТИРОВАТЬ:Попробуйте скопировать файл в каталог, из которого вы запускаете свою программу, и посмотрите, сможет ли она его прочитать.Вы также можете попробовать следующее после копирования файла в каталог выполнения:
InputStream in = getClass().getResourceAsStream("/gameTheoryAgentConfiguration.properties");
configuration.load(in);
(при условии, что в вашем пути к классам есть ".")