2010-11-27 8 views
3

Ich möchte XML-Datei im Servlet analysieren, aber eine Ausnahme passieren, die JVM nicht den Speicherort der XML-Datei angeben kann.wo soll ich XML-Datei suchen, wenn ich es in Java-Servlet analysieren möchte

ist hier die Ausnahme

java.io.FileNotFoundException: FormFieldsNames.xml (The system cannot find the file specified) 

Ich habe versucht, die XML-Datei in der Projektleitung zu legen, java src pachage, und im Inneren des pachage von Servlets, aber alle tese versucht bekommen das gleiche Ergebnis.

Wo sollte ich XML-Datei suchen, bitte helfen und danke im Voraus.

Antwort

4

Ein häufiges Problem bei Dateien aus dem Classpath Lesen wird immer Der Ort ist in Ihrer WAR-Datei korrekt.

In Java, ein Servlet namens myservlet konnte die Datei wie diese

InputStream is=MyServlet.getClass().getResourceAsStream("/path/to/file/example.txt") 

Referenz, die eine Datei unter

gespeichert finden wird
WEB-INF/classes/path/to/file/example.txt 

Hinweis der führende/welche fängt die Menschen oft aus.

Es ist möglich, dass der Anwendungscontainer aus dem lokalen Dateisystem liest (sagen Sie, wenn Sie externe Eigenschaften erhalten wollten und JNDI nicht verwenden wollten). Dafür würde man den üblichen Dateizugriff Prozess verwenden:

InputStream fis = FileInputStream(new File("/usr/share/myapp/another-example.txt")); 

Natürlich, wenn man es Punkt DOM will, dann könnte myservlet folgende Angaben enthalten:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
DocumentBuilder documentBuilder = dbf.newDocumentBuilder(); 
InputStream is = MyServlet.getClass().getResourceAsStream("/path/to/my/example.xml"); 
Document document = documentBuilder.parse(new InputSource(is)); 
// And start exploring the NodeList... 
NodeList nodeList = document.getFirstChild().getChildNodes(); 

, die den Trick tun sollen.

+0

@Gray Rowe- was, wenn ich kein Objekt von Servlet machen möchte ??? Wie kann ich diese MyServlet.getClass() verwenden. GetResourceAsStream ("/ Pfad/zu/meinem/Beispiel.xml"); – palAlaa

+0

@Alaa Der obige Ansatz funktioniert für jede Klasse. Ihr Servlet könnte nur eine Instanz der Klasse aufrufen, die die Suche behandelt, ersetzen Sie einfach das MyServlet durch den entsprechenden Klassennamen. –

+0

es funktioniert, muss ich den XML-Speicherort innerhalb des Servlet angeben, damit ich verwende: InputStream fis = this.getClass(). GetResourceAsStream ("/ FormFieldsNames.xml"); Vielen Dank – palAlaa

1

Wenn Sie es in Ihre JAR/WAR-Datei einfügen, sollten Sie es problemlos mit Class.getResourceAsStream oder ClassLoader.getResourceAsStream laden können. Tun Sie das, anstatt zu versuchen, es als eine tatsächliche Datei auf dem Dateisystem zu laden.

2

Die üblichen Standorte sind:

  • WEB-INF/ - erhalten durch getServletContext().getResourceAsStream(..)
  • WEB-INF/classes - entweder durch die oben erhalten, oder getClass().getResourceAsStream(..)
+0

@ Bozho- Ich versuchte beide, aber ich verwendete XMLStreamReader xmlReader = factory.createXMLStreamReader (neue FileReader (fileName)); die XML-Datei zu lesen und dann über STAX zu verarbeiten, aber die gleiche Ausnahme !! – palAlaa

+1

@Alaa - Sie übergeben einen Dateinamen. Ich habe sowas nie geschrieben. Ich habe geschrieben, wie man einen 'InputStream' erhält. Sie können einen Leser von einem Pfad über 'InputStreamReader' erhalten. Benutze es. – Bozho

+0

@ Bozho- ich übergebe den InputSream als Parameter, aber ich dachte, dass die Weitergabe des Dateinamens mehr brauchbar sein kann !! was denkst du? – palAlaa

Verwandte Themen