Ich habe ein Projekt mit 2 Paketen:
tkorg.idrs.core.searchengines
tkorg.idrs.core.searchengines
In Paket (2) habe ich eine Textdatei ListStopWords.txt
, in Paket (1) habe ich eine Klasse FileLoadder
. Hier ist Code in FileLoader
:
File file = new File("properties\\files\\ListStopWords.txt");
Aber haben Sie diesen Fehler:
The system cannot find the path specified
Können Sie eine Lösung geben, um das Problem zu beheben? Vielen Dank.
properties.files
für2
?Antworten:
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 IhreFileLoader
Klasse, dann tun Sie Folgendes:Oder wenn alles, wonach Sie letztendlich suchen, tatsächlich eines
InputStream
davon ist:Dies wird sicherlich dem Erstellen eines Pfads vorgezogen,
new File()
da diesurl
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 vomFile
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 dieInputStream
sofort an dieload()
Methode weiterleiten .Hinweis: Wenn Sie versuchen, aus dem
static
Kontext heraus darauf zuzugreifen , verwenden SieFileLoader.class
(oder was auch immerYourClass.class
) anstelle dergetClass()
obigen Beispiele.quelle
FileLoader
ist die eigene benutzerdefinierte Klasse von OP. Es soll genau die Klasse sein, in der Sie versuchen, die Ressource zu erhalten. So, soNameOfYourCurrentClass.class.getResourceAsStream(...)
. DasClassLoader.class
wird scheitern , wenn dieClassLoader
Klasse von einem anderen Classloader geladen wird, die mit einer Hierarchie von mehreren Classloader in einer „Unternehmen“ Anwendung passieren kann (wie eine Java EE Web - Anwendung).Die folgende Zeile kann verwendet werden, wenn der relative Pfad der Datei angegeben werden soll.
quelle
InputStream
?InputStream is = new FileInputStream("./properties/files/ListStopWords.txt");
Der relative Pfad funktioniert in Java mit dem. Operator.
Die Frage ist also, woher kennen Sie den Pfad, nach dem Java gerade sucht?
mach ein kleines Experiment
Beobachten Sie die Ausgabe, Sie werden das aktuelle Verzeichnis kennenlernen, in dem Java sucht. Verwenden Sie von dort aus einfach den Operator ./, um Ihre Datei zu suchen.
Zum Beispiel, wenn die Ausgabe ist
und Ihre Datei befindet sich im Ordner MyProject einfach verwenden
Hoffe das hilft
quelle
quelle
.class
Literal verweisen, indem Sie den vollständigen Namen der Klasse angeben.Versuchen
.\properties\files\ListStopWords.txt
quelle
Ich hätte kommentieren können, aber ich habe weniger Repräsentanten dafür. Samrats Antwort hat den Job für mich gemacht. Es ist besser, den aktuellen Verzeichnispfad durch den folgenden Code zu sehen.
Ich habe es einfach verwendet, um ein Problem zu beheben, mit dem ich in meinem Projekt konfrontiert war. Stellen Sie sicher, dass Sie ./ verwenden, um zum übergeordneten Verzeichnis des aktuellen Verzeichnisses zurückzukehren.
quelle
Während die von BalusC bereitgestellte Antwort für diesen Fall funktioniert, wird sie unterbrochen, wenn der Dateipfad Leerzeichen enthält, da diese in einer URL in% 20 konvertiert werden, was kein gültiger Dateiname ist. Wenn Sie das Dateiobjekt mithilfe eines URI anstelle eines Strings erstellen, werden Leerzeichen korrekt behandelt:
quelle
Ich wollte 'command.json' in src / main // js / Simulator.java analysieren. Dafür habe ich die json-Datei in den src-Ordner kopiert und den absoluten Pfad wie folgt angegeben:
quelle
Angenommen, Sie möchten aus dem
resources
Verzeichnis in derFileSystem
Klasse lesen .Hinweis: Führen
.
ist nicht erforderlich.quelle
Für mich ist das Problem tatsächlich, dass der Klassenpfad des Dateiobjekts von stammt
<project folder path> or ./src
. Verwenden SieFile file = new File("./src/xxx.txt");
also mein Problem gelöstquelle
String basePath = neue Datei ("myFile.txt"). GetAbsolutePath (); Diesen Basispfad können Sie als korrekten Pfad Ihrer Datei verwenden
quelle
Wenn Sie versuchen,
getClass()
von einer statischen Methode oder einem statischen Block aufzurufen , können Sie wie folgt vorgehen.Sie können
getClass()
dasProperties
Objekt aufrufen, in das Sie laden.quelle
Wenn die Textdatei nicht gelesen wird, versuchen Sie, einen näheren absoluten Pfad zu verwenden (wenn Sie möchten, dass Sie den vollständigen absoluten Pfad verwenden können), wie folgt:
Angenommen, der absolute Pfad ist:
quelle