FileNotFoundException, когда файл существует со всеми разрешениями
Я пытаюсь прочитать файл, и я получаю ошибку
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
Ответы
Ответ 1
В соответствии с исходной stacktrace между именем файла и причиной есть два пробела:
FileNotFoundException: ...Configuration.properties (No such file or directory)
--------------------------------------------------^^
Это указывает на то, что имя файла возможно имеет конечное пространство. Можете ли вы дважды проверить свою переменную pathToConfiguration на:
System.out.println("[" + pathToConfiguration + "]");
Чтобы проверить, что путь - это то, что вы думаете?
Ответ 2
Когда вы запускаете свою java-программу, вы запускаете ее как один и тот же "пользователь", как при проверке командной строки?
РЕДАКТИРОВАТЬ. Попробуйте скопировать файл в каталог, в котором вы запускаете свою программу, и посмотреть, сможет ли он прочитать его. Вы также можете попробовать следующее после копирования файла в каталог выполнения:
InputStream in = getClass().getResourceAsStream("/gameTheoryAgentConfiguration.properties");
configuration.load(in);
(если у вас есть "." в вашем пути к классам)
Ответ 3
Я предполагаю, что вы дважды проверяли путь несколько раз, и, как вы говорите, вы используете приложение на том же компьютере, на котором находится код.
Может быть, есть некоторые неясные NFS/файловые серверы, которые действительны только для оболочки входа, но не для приложений?
Попробуйте скопировать файл в $HOME и посмотреть, работает ли он.
Ответ 4
Что выводится, если вы пишете это:
System.out.println(new File(".").getAbsolutePath());
каков ваш текущий каталог?