FileManager Ordner eine Ebene hoch

hi,
ich möchte in meinem Filemanager ein Button mit dem ich per klick einen Ordner eine Eben hoch , also in den übergeordneten Ordner springen kann, die buttons , listener usw. stehen schon,
ich hab mir nur überlegt wie ich am besten hoch springen kann? Dazu nehme ich den aktuellen Pfad, und müsste ihn nur vom hinteren Ende aus bis zum nächsten “” abschneiden oder?
wie mache ich das am besten? Mit einem String Tokenizer?

Wozu einen Button? Mit Backspace kommt man in der Regel zurück.

[QUOTE=Crian]Wozu einen Button? Mit Backspace kommt man in der Regel zurück.[/QUOTE]Wenn Du damit anfängst kannst Du auch fragen, wass er gegen den [JAPI]JFileChooser[/JAPI] hat…

bye
TT

Achso. Man kann in einem String nach dem letzten Index von etwas suchen. Vielleicht hilft das? Bedenke, dass Verzeichnistrenner / oder auch \ sein könnten. Vielleicht hilfreich:

     * Ermittelt die Position des letzten Slash oder Backslash in einem
     * Dateinamen.
     *
     * @param filename
     *            Zu untersuchender Dateiname.
     * @return Letzte Position (beginnend bei 0) oder -1, wenn weder Slash noch
     *         Backslash in der Eingabe enthalten waren.
     */
    public int lastSlash(String filename) {
        int lastSlash = filename.lastIndexOf("/");
        int lastBackslash = filename.lastIndexOf("\\");
        if (lastSlash > lastBackslash) {
            return lastSlash;
        }
        else {
            return lastBackslash;
        }
    }

Ich tendiere da eher zu

System.getProperty("path.separator");

o.ä.

[QUOTE=Fred12]Dazu nehme ich den aktuellen Pfad, und müsste ihn nur vom hinteren Ende aus bis zum nächsten “” abschneiden oder?
wie mache ich das am besten? Mit einem String Tokenizer?[/QUOTE]
Verwaltest Du in Deinem FileManager etwa Strings? Wenn Du File Objekte verwendest (wenn nicht solltest Du das ändern) reicht doch ein einfaches getParentFile() um an das übergeordnete Verzeichnis zu gelangen.

hm ok, ich hab nix gegen ("…" ), aber wenn ich das einsetzte geht er irgendwie vom aktuellen JAVA Projektordner eins zurück und dann nicht mehr weiter… obwohl im FileManager der OrdnerPfad C:\ standardmäßig gesetzt ist… sonst muss ich die Methode von Crian nehmen…
aber gibs nicht auch ne eingebaute methode getRoot() oder so wo ich von ner File einfach den root zurückbekomme?
ich wollte nämlich den aktuellen Pfad in ne File „umwandeln“ und davon einfach den root nehmen und wieder übergeben für den Pfadwechsel…


		if (quelle == hoch) {
			File actualPath = new File(sideFunctionsHelper.getCurrentFolderName());
			System.out.println(actualPath.toString());
		}	

Edit: ach ja, mit actualPath.getParent() gehts tatsächlich, komisch ist ja aber das gleiche wie der zurück button… :open_mouth:

Genau. Sauber und plattformunabhängig.

[QUOTE=vanny]Ich tendiere da eher zu

System.getProperty("path.separator");

o.ä.[/QUOTE]

Ja, ich auch. Allerdings können die Benutzer in meinem Programm Pfade anpassen in den Optionen. Da muss ich damit rechnen, dass jemand den “falschen” benutzt und es wäre schlecht, wenn das dann nicht funktioniert, weil das ja “der falsche Slash” war, obwohl Windows sonst ja auch mit / zurechtkommt. Dafür brauchte ich die Methode mal.

Und da die Bentuzer neben einem Knopf zu einem Standarddialog auch einfach was ins Feld kopieren oder tippen können (wollen) … ich meine, ich konvertiere das sogar in den Standard-Trenner und war nur äußerst defensiv.

Ja, dann aber die evtl. „falsche Eingabe“ auch genau dort beim User überprüfen/abfangen.
Wenn es um das reine Zurückspringnen im Pfad geht dann eben immer die Systemzeichen nutzen. Ich denke mal, das meintest du mit defensiv !?

Mit defensiv meinte ich, dass es allgemeine Methode ist, die nicht unbedingt Rückschlüsse auf die Herkunft ihrer Parameter ziehen kann. Da rechne ich lieber mit dem schlimmsten. Ich könnte natürlich auch eine IllegalArgumentException werfen wenn die falsche Slashart vorkommt, und mich dann hier und da herumärgern.

Und vermutlich ist die Methode entstanden, bevor ich es nach der Benutzereingabe in den Standard korrigiert habe.