Подтвердить что ты не робот

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
4b9b3361

Ответ 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());

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