Я пишу программу в 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
(для перехода к синтаксическому анализу
позже), то у вас возникнет более управляемая проблема, заключающаяся в том, чтобы убедиться, что этот файл существует (используя File.exists ()
и так далее). Если вы не можете зайти так далеко, то ваша проблема не в DocumentBuilder
или DOM, а в основных путях к файлам. Помните, что если вы используете относительные пути к файлам (например, новый файл («resources / majors_xml_db.xml»)
), то это будет разрешено относительно рабочего каталога процесса. Работает это или нет, зависит от того, как вы запускаете свою программу.