Wenn es sich bereits im Klassenpfad befindet, beziehen Sie es einfach aus dem Klassenpfad und nicht aus dem Festplattendateisystem. Spielen Sie nicht mit relativen Pfaden java.io.File
. Sie hängen vom aktuellen Arbeitsverzeichnis ab, über das Sie innerhalb des Java-Codes keinerlei Kontrolle haben.
Angenommen, das ListStopWords.txt
befindet sich im selben Paket wie Ihre FileLoader
Klasse, dann tun Sie Folgendes:
URL url = getClass().getResource("ListStopWords.txt");
File file = new File(url.getPath());
Oder wenn alles, wonach Sie letztendlich suchen, tatsächlich eines InputStream
davon ist:
InputStream input = getClass().getResourceAsStream("ListStopWords.txt");
Dies wird sicherlich dem Erstellen eines Pfads vorgezogen, new File()
da dies url
möglicherweise nicht unbedingt einen Pfad für das Festplatten-Dateisystem darstellt, sondern auch den Pfad für das virtuelle Dateisystem (was passieren kann, wenn die JAR in den Speicher anstatt in einen temporären Ordner auf dem Festplatten-Dateisystem erweitert wird). oder sogar einen Netzwerkpfad, die beide per Definition nicht vom File
Konstruktor verdaulich sind .
Wenn die Datei - wie der Paketname andeutet - tatsächlich eine vollwertige Eigenschaftendatei (mit key=value
Zeilen) mit nur der "falschen" Erweiterung ist, können Sie die InputStream
sofort an die load()
Methode weiterleiten .
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));
Hinweis: Wenn Sie versuchen, aus dem static
Kontext heraus darauf zuzugreifen , verwenden Sie FileLoader.class
(oder was auch immer YourClass.class
) anstelle der getClass()
obigen Beispiele.
properties.files
für2
?