Dateien nicht mehr lesbar
-
01-10-2019 - |
Frage
Ich habe ein Java-Projekt, die diese Dateistruktur hat (gezeigt in Eclipse):
ProjectName
+- Deployment Descriptor: ProjectName
¦- Java Resources:src
¦- Package1
-MyClass.java
¦- FileFolder
-MyFile.txt
Und so weit von myClass ich in der Lage bin MyFile.txt mit zu lesen:
try
{
reader = new BufferedReader(new FileReader(new File("FileFolder/MyFile.txt")));
while((line=reader.readLine())!=null)
{
line=line.trim();
myVector.add(line);
}
reader.close();
}
catch(Exception e)
{
e.printStackTrace();
}
Aber wenn ich Package1 in eine dynamische Web-Projekt und die FileFolder Ordner in root setzen, wird die Datei nicht mehr gefunden.
Wer weiß, wie die Datei zu lesen?
Vielen Dank im Voraus!
Lösung
Dynamische Web-Projekte generieren IST-Dateien.
Der Server kann oder die WAR-Datei zurück auf eine Dateisystemstruktur nicht erweitern.
Sie sind am besten aus der Klasse oder Classloader mit .getResourceAsStream("/FileFolder/MyFile.txt")
, welche Dateien von JAR / WAR-Dateien lesen kann, und gibt einen InputStream
.
Beispiel:
reader = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("/FileFolder/MyFile.txt")));
Edit: Wenn diese von einem Servlet
ist, sollten Sie mit GAWI Antwort statt.
Bearbeiten. 2: Wenn dies in einer static
Methode ist, müssen Sie MyClass.class
verwenden, anstatt this.getClass()
, wo MyClass
ist der Klassenname
Andere Tipps
Sie öffnen eine Datei einen Pfad relativ zum aktuellen Arbeitsverzeichnis verwenden. Das ist wahrscheinlich nicht die Arbeit an einem Container Web-App, da das aktuelle Arbeitsverzeichnis wird nicht die Wurzel Ihrer Anwendung sein.
Außerdem Sie Datei auf dem Dateisystem möglicherweise nicht, sondern in einer WAR-Datei.
Der richtige Weg, um eine Datei in einem Webapp zu öffnen, ist die ServletContext.getResourceAsStream () -Methode zu verwenden.