سؤال

أنا أكتب برنامجًا في Java حيث قرأت في بيانات من ملف XML وأحلله. يتم استيراد الملف إلى مجلد يسمى "الموارد" في دليل SRC لمشروعي. أنا أستخدم Eclipse. عندما أقوم بتشغيل البرنامج ، أحصل على الخطأ التالي:

java.io.FileNotFoundException: /Users/thechiman/Dropbox/introcs/PSU SOC Crawler/resources/majors_xml_db.xml (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:106)
at java.io.FileInputStream.<init>(FileInputStream.java:66)
...

الكود ذو الصلة هنا:

private void parseXML() {
    //Get a factory
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    try {
        //Use factory to get a new DocumentBuilder
        DocumentBuilder db = dbf.newDocumentBuilder();

        //Parse the XML file, get DOM representation
        dom = db.parse("resources/majors_xml_db.xml");
    } catch(ParserConfigurationException pce) {
        pce.printStackTrace();
    } catch(SAXException se) {
        se.printStackTrace();
    } catch(IOException ioe) {
        ioe.printStackTrace();
    }
}

لا أفهم لماذا أحصل على filenotfoundexception عندما يكون الملف موجودًا. شكرا للمساعدة.

هل كانت مفيدة؟

المحلول

مع DocumentBuilder.parse(String), ، يتم تفسير الحجة على أنها URI ، وفي هذه الحالة ، ستكون URI نسبية (السلسلة التي تعطيها ليست "URI" الكاملة). ما هو قريب ل هو غامض بعض الشيء في هذه المرحلة ، دون مزيد من المعلومات حول الإعداد الخاص بك. سيقوم وقت التشغيل بتفسيره على أنه نسبة إلى شيئا ما, ، لكن ليس من الواضح هنا ما هو شيء.

ستحصل على نتائج أكثر موثوقية باستخدام أحد الآخرين parse الطرق ، مثل parse(File) أو parse(InputStream). في كل حالة ، لا يوجد غموض فيما يتعلق بما تطلب منه تحليله.

إذا قررت بناء أ File الكائن أولاً (لتمرير إلى parse في وقت لاحق) ، ثم لديك مشكلة أكثر قابلية للإدارة للتأكد من وجود هذا الملف (باستخدام File.exists() وهلم جرا). إذا لم تتمكن من الوصول إلى هذا الحد ، فلن تكون مشكلتك معها DocumentBuilder أو DOM ، إنه مع مسارات الملف الأساسية. تذكر أنه إذا كنت تستخدم مسارات الملفات النسبية (على سبيل المثال new File("resources/majors_xml_db.xml")) ثم سيتم حل هذا بالنسبة إلى دليل العمل للعملية. إذا كان يعمل أو لا يعتمد على كيفية تشغيل البرنامج الخاص بك.

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