FileNotfoundException عند قراءة ملف .xml لتحليل
-
24-09-2019 - |
سؤال
أنا أكتب برنامجًا في 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")
) ثم سيتم حل هذا بالنسبة إلى دليل العمل للعملية. إذا كان يعمل أو لا يعتمد على كيفية تشغيل البرنامج الخاص بك.