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.txtbefindet sich im selben Paket wie Ihre FileLoaderKlasse, 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 InputStreamdavon ist:
InputStream input = getClass().getResourceAsStream("ListStopWords.txt");
Dies wird sicherlich dem Erstellen eines Pfads vorgezogen, new File()da dies urlmö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 FileKonstruktor verdaulich sind .
Wenn die Datei - wie der Paketname andeutet - tatsächlich eine vollwertige Eigenschaftendatei (mit key=valueZeilen) mit nur der "falschen" Erweiterung ist, können Sie die InputStreamsofort an die load()Methode weiterleiten .
Properties properties = new Properties();
properties.load(getClass().getResourceAsStream("ListStopWords.txt"));
Hinweis: Wenn Sie versuchen, aus dem staticKontext heraus darauf zuzugreifen , verwenden Sie FileLoader.class(oder was auch immer YourClass.class) anstelle der getClass()obigen Beispiele.
properties.filesfür2?