Das hat mich wirklich verwirrt.Fiddly Sache mit bin-Verzeichnis in Eclipse zu tun
In meinem Eclipse-Arbeitsbereich habe ich ein Projekt namens "Java Scratchpad". Im "Package Explorer" sehen Sie "src" (Source Folder) unter diesem und dann "root" (Package). Unter "root" befindet sich eine .java-Datei namens "LoggingTest.java".
Der Pfad zu dieser Java-Datei lautet also "G: \ Eigene Dateien \ software projects \ workspace \ Java scratchpad \ src \ root \ LoggingTest.java".
Wenn ich den folgenden Code in Eclipse ausführen:
Path currentRelativePath = Paths.get("");
String s_currRelPath = currentRelativePath.toAbsolutePath().toString();
String pathWithForwardSlashes = s_currRelPath.replace("\\", "/");
System.out.println("path " + pathWithForwardSlashes);
Das Ergebnis ist
Pfad G:/Eigene Dateien/Software-Projekten/Arbeitsbereich/Java Scratchpad
Aber ... wenn ich denselben Code an der Eingabeaufforderung abspiele, muss ich in folgendem Verzeichnis starten:
G: \ Eigene Dateien \ Software-Projekte \ Arbeitsplatz \ Java Scratchpad \ sind
... und dann an der Eingabeaufforderung gehen>java root.LoggingTest
.
Die Ausgabe des obigen Bit-Code ist dann:
Pfad G:/Eigene Dateien/Software-Projekten/Arbeitsbereich/Java Scratchpad/bin
Mit anderen Worten, wenn Wenn Sie das Objekt an der Eingabeaufforderung ausführen, führen Sie eine .class-Datei im Verzeichnis \ bin aus. Wenn Sie jedoch in Eclipse ausgeführt wird, gibt das Eclipse-Framework vor, dass das Verzeichnis bin nicht vorhanden ist.
Und das Ergebnis ist, dass ich unterschiedliche Werte für den "aktuellen relativen Pfad" (CWD) abhängig davon, ob ich in Eclipse oder an der Eingabeaufforderung ausgeführt werde. Wenn ich ein Verzeichnis relativ zur CWD erstellen oder verwenden möchte, bekomme ich unterschiedliche Werte abhängig davon, ob ich in Eclipse oder an der Eingabeaufforderung laufe.
Ich fühle mich heute Nacht ziemlich langsam. Was soll ich machen? Gibt es eine Möglichkeit festzustellen, ob ein Projekt in Eclipse oder an der Eingabeaufforderung ausgeführt wird? Oder sollte ich einfach versuchen zu erkennen, ob der Pfad in "\ bin" endet und diese vier Zeichen entfernen, um die Pfade äquivalent zu machen?
später
Hinzufügen einfach eine Anmerkung in Antwort auf den Kommentar von E-Riz:
Es ist eine einfache Sache: Ich möchte Protokolle erstellen, und ich will Lucene-Indizes erstellen .. Und um die Dinge an einem Ort zu halten (in diesem Stadium sowieso), möchte ich diesen Ausgang nur an einen Ort wie ...\Java scratchpad\output\indices\[name of index]
bzw. ...\Java scratchpad\output\logging\[name of log]
setzen.
Und ja, natürlich weiß ich zur Zeit den absoluten Weg, den es hier gibt ... aber wie der Name schon sagt, ist dies ein "Scratchpad" oder Testgebiet ...Dann kann dieser Code, der die CWD verwendet, um zu bestimmen, wo Logs oder Indizes abgelegt oder gefunden werden sollen, generischer verwendet werden, ohne die absoluten Pfade kennen zu müssen.
Aber es muss entweder in Eclipse oder an der Eingabeaufforderung funktionieren ...!
NB meine aktuelle Workaround ist in der Tat zu überprüfen, ob pathWithForwardSlashes
endet in "\ bin", und wenn ja, diese letzten 4 Zeichen zu löschen. Ich kann nicht die einzige Person sein, der diese Kuriosität begegnet ist. Wetten, es gibt klügere Lösungen!
Dies ist erklärbar, aber zuerst, warum erklären Sie nicht, was Ihr Endziel ist. Mit anderen Worten, was versuchen Sie relativ zum aktuellen Arbeitsverzeichnis zu erreichen? Ich bin mir ziemlich sicher, dass die beste (n) Antwort (en) davon abhängen werden, ob man das eigentliche Ziel jenseits von "Was ist das aktuelle Arbeitsverzeichnis?" –