2016-07-28 10 views
0

Ich schreibe gerade eine API-basierte Gui, in der ich einen vollen Dateinamen angezeigt werden soll ... Der Dateiname ist oft zu lang, und so möchte ich diesen Dateinamen zu schneiden nur auslassen so wenige Ordner wie nötig. Beispiel:Trim Dateiname, um kurz genug zu sein

C: \ Benutzer \ RoiEX \ someFolder \ SomeOtherFolder \ someFile.someExtension

sollte wie

C auf etwas getrimmt werden: \ ... \ someOtherFolder \ someFile.someExtension

Ich habe meine Variable fileName, die durch den Aufruf file.getAbsolutePath() generiert wird. Ich habe eine Methode, nennen wir es ist tooLarge(fileName) ich so beginnen würde:

String fileName = file.getAbsolutePath(); 
while(tooLarge(fileName)){ 
    fileName = trimPath(fileName); 
} 
render(fileName); 

Was soll ich in trimPath() tun?

Jede Hilfe

+0

Wann möchten Sie den Dateinamen abschneiden ?. Was sind die Bedingungen ? – TheLostMind

+0

@TheLostMind der Code oben soll aufgerufen werden, wenn gerendert – RoiEX

+1

ich sehe. Also, Sie wissen bereits, dass die Länge mehr ist und haben beschlossen, es zu trimmen. – TheLostMind

Antwort

1

Eine richtige regex mit replaceAll() wird für Sie arbeiten:

public static void main(String[] args) { 
    String s = "C:\\asas\\Users\\RoiEX\\someFolder\\SomeOtherFolder\\someFile.someExtension"; 
    System.out.println(s.replaceAll("(\\w+:\\\\).*?(\\\\\\w+\\\\\\w+.\\w+)$", "$1...$2")); 
} 

O/P:

C:\...\SomeOtherFolder\someFile.someExtension 

Die obige regex wählt das letzte Startverzeichnis und letzte Verzeichnis mit Dateinamen.

+0

Irgendein anderer Regex für UNIX-Dateisysteme? – RoiEX

+0

@RoiEX - Funktioniert es nicht richtig? – TheLostMind

+0

Haven hat es auf einem UNIX-System getestet, aber UNIX-Dateisysteme funktionieren wie '/ home/user/RoiEX' – RoiEX

1

geschätzt Wenn Sie Ihren Pfad zu diesem Verzeichnis kennen und Sie in einen relativen Pfad konvertieren, das ist, was Sie tun können.

final String PATH = "C:\\Users\\RoiEX\\someFolder"; 
String path = filename.replaceFirst(PATH, "C\\..\\"); 
+0

Ich möchte diese Plattform unabhängig haben – RoiEX

+0

Auch die PATH könnte je nach Betriebssystem variieren – RoiEX

+0

Unabhängig von der Plattform, Lassen Sie die erste und letzte dir da sein und ersetzen Sie den Pfad, den Sie glauben, mit einem .. behoben werden. Punkt). Wenn Sie in diesem Fall wissen, dass RoiEX \\ someFolder ein fester Pfad ist, ersetzen Sie diesen Punkt durch einen Punkt. – Rupesh