FileNotFoundException, когда файл существует со всеми разрешениями - PullRequest
10 голосов
/ 22 февраля 2010

Я пытаюсь прочитать файл и получаю ошибку

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

Ответы [ 4 ]

21 голосов
/ 22 февраля 2010

Согласно исходной трассировке стека между именем файла и причиной есть два пробела:

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

Это указывало бы на то, что имя файла может содержать пробел. Можете ли вы проверить вашу переменную pathToConfiguration дважды:

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

Чтобы дважды проверить, что путь - это то, что вы думаете?

0 голосов
/ 22 февраля 2010

Полагаю, вы дважды проверили имя пути несколько раз, и, как вы говорите, вы запускаете приложение на той же машине, где находится код.

Может быть, есть некоторые неясные монтирования NFS / файлового сервера, которые действительны только для оболочки входа в систему, но не для приложений?

Попробуйте скопировать файл в свой $ HOME и посмотреть, работает ли он.

0 голосов
/ 22 февраля 2010

Что будет выведено, если вы напишите это:

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

каков ваш текущий каталог?

0 голосов
/ 22 февраля 2010

Когда вы запускаете вашу Java-программу, вы запускаете ее как того же пользователя, что и при проверке командной строки?

EDIT : попробуйте скопировать файл в каталоготкуда вы запускаете свою программу и смотрите, может ли она ее прочитать.Вы также можете попробовать следующее после копирования файла в каталог выполнения:

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

(при условии, что у вас есть "." В вашем пути к классам)

...