FileNotfoundException عند وجود ملف مع جميع الأذونات [مكررة

StackOverflow https://stackoverflow.com/questions/2312924

سؤال

هذا السؤال لديه بالفعل إجابة هنا:

أحاول قراءة ملف والخطأ الذي أحصل عليه

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 (الذي يتم تمريره إلى المُنشئ)) ويعمل بشكل جيد.

تمت إضافة في الشيكات التالية في كتلة الصيد

        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
هل كانت مفيدة؟

المحلول

وفقًا لـ StackTrace الأولي ، يبدو أن هناك مسافة بين اسم الملف والسبب:

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

هذا من شأنه أن يشير لي إلى أن اسم الملف ربما يحتوي على مساحة زائدة. هل يمكنك التحقق من متغير التكوين الخاص بك عن طريق:

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

لمضاعفة التحقق من أن المسار هو ما تعتقد أنه؟

نصائح أخرى

أفترض أنك قمت بفحص المسار المزدوج أكثر من مرة ، وكما تقول إنك تقوم بتشغيل التطبيق على نفس الجهاز حيث يوجد الرمز.

هل يمكن أن يكون هناك بعض حوامل خادم NFS/ملفات غامضة صالحة فقط لقذيفة تسجيل الدخول ولكن ليس للتطبيقات؟

حاول نسخ الملف في منزلك $ ومعرفة ما إذا كان يعمل.

ما يتم إخراجه إذا كتبت هذا:

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

ما هو الدليل الحالي الخاص بك؟

عندما تقوم بتنفيذ برنامج Java الخاص بك ، هل تقوم بتشغيله على أنه "المستخدم" نفسه كما عند تشغيل اختبارات سطر الأوامر؟

تعديل: جرب نسخ الملف إلى الدليل الذي تقوم بتشغيل البرنامج منه ومعرفة ما إذا كان قادرًا على قراءته. يمكنك أيضًا تجربة ما يلي بعد نسخ الملف إلى دليل التنفيذ الخاص بك:

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

(على افتراض أن لديك "." في classpath)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top