У меня есть простой плагин java, который должен прочитать файл XML. Я использую java .io File, чтобы прочитать мой файл. Программа отлично работает, когда я указываю путь к файлу как D: \ Studies \ HospitalManagement [AbulanceService] \ config \ AmbulanceService. xml. Но меня попросили указать путь как config / AmbulanceDetails. xml. Поскольку я новичок ie в этой концепции чтения файлов, я не могу понять, как заставить это работать. Когда я пытаюсь передать путь к файлу, как указано во втором тексте, выделенном жирным шрифтом, это дает мне исключение. Я попытался использовать метод getAbsolutePath () и поместить файл XML в другую исходную папку, которая была предложена в нескольких похожих вопросах в StackOverflow, но не решила мою проблему. Как я могу решить эту проблему? Огромное спасибо за помощь!
Исходный код: -
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class AmbulanceServiceImpl implements AmbulanceService {
private static final String AMBULANCE = "Ambulance";
private static final String AVAILABILITY = "Availability";
private static final String AVAILABLE = "Available";
private static final String REGISTRATION_NO = "RegNo";
private static final String DRIVERNAME = "Driver";
private static final String NO_VEHICLE_AVALABLE_MESSAGE = "Sorry! No ambulance available currently";
private static final String PATH = "config/AmbulanceDetails.xml"; //this is the way I want to specify my file path
private NodeList nodeList;
private void readXml() {
File file = new File(PATH); //passing the file path
try {
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(file);
document.getDocumentElement().normalize();
nodeList = document.getElementsByTagName(AMBULANCE);
} catch (ParserConfigurationException | SAXException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private String findAvailableAmbulance() {
//some other process
}
@Override
public String getAnAmbulance() {
// TODO Auto-generated method stub
readXml();
return findAvailableAmbulance();
}
}
Исключение: -
java.io.FileNotFoundException: D:\Softwares\eclipse\config\AmbulanceDetails.xml (The system cannot find the path specified)
at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:213)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:155)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:110)
at java.base/sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:86)
at java.base/sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:184)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:652)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:150)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:860)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:824)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:246)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:206)
at hospitalmanagement__abulanceservice_.AmbulanceServiceImpl.readXml(AmbulanceServiceImpl.java:37)
at hospitalmanagement__abulanceservice_.AmbulanceServiceImpl.getAnAmbulance(AmbulanceServiceImpl.java:80)
at hospitalmanagement__abulanceservice_.Activator.start(Activator.java:12)
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:842)
at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:554)
at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:834)
at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:791)
at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1015)
at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:365)
at org.eclipse.osgi.container.Module.doStart(Module.java:603)
at org.eclipse.osgi.container.Module.start(Module.java:467)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1844)
at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1837)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1780)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1742)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1664)
at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345)
Структура папки проекта: -