Как прочитать файл XML, используя абсолютный путь к файлу - PullRequest
1 голос
/ 09 марта 2020

У меня есть простой плагин 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)

Структура папки проекта: -

Project folder structure

...