Konvertieren zu gültigen Dateinamen

Status
Nicht offen für weitere Antworten.

TypusMensch

Mitglied
Folgendes Problem:

Ich habe aus einer INI einen Namen herausgelesen. Dieser Name soll nun Bestandteil eines neuangelegten Verzeichnisses sein (File.mkdir()). Das klappt wunderbar. Leider streikt er beim Anlegen bzw. beim späteren Kopieren von Dateien in das Verzeichnis oftmals, dass das Verzeichnis nicht vorhanden ist, oder direkt folgende Meldung:
"Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch"

Fakt ist, dass oftmals Zeichen wie Doppelpunkt, Fragezeichen, Hochkommas usw. in den Namen in der Ini stehen, welche ja nicht als Verzeichnisse gültig sind. Da liegt das Problem. Wie kann ich explizit diese Zeichen herausfiltern? Das ganze soll am Ende plattformunabhängig sein.

Vielleicht jemand eine Idee?

Habs jetzt erstmal so gelöst... vielleicht hat aber jemand einen besseren Einfall:

Code:
   name.replaceAll("\\", "");
    name.replaceAll("/", "");
    name.replaceAll("*", "");
    name.replaceAll("?", "");
    name.replaceAll("\"", "");
    name.replaceAll("<", "");
    name.replaceAll(">", "");
    name.replaceAll("|", "");
 

dayaftereh

Top Contributor
Hey vielicht hilft ja das, so kannst du bestimmte zeichen ersetzen zu den die du haben willst

Code:
String str = "Hallo|ich|was|mach";
		str = str.replace("|", " ");

Weiß ja nicht ob das,dass ist was du suchst ^^
 

musiKk

Top Contributor
Wow. Das ist ja auch ueberhaupt nicht das, was der OP schon hat...

Fakt ist, dass die Geschichte mit den zulaessigen Zeichen im Dateinamen am Dateisystem liegt und die sind was Sonderzeichen angeht sehr unterschiedlich. Am besten schaust du mal hier vorbei und suchst dir den kleinsten gemeinsamen Nenner aller Plattformen, die du unterstuetzen willst.
 

TypusMensch

Mitglied
LOL.

Naja aber mit dieser oben genannten Methode kommt häufig ein:
java.util.regex.PatternSyntaxException: Unexpected internal error near index 1

:(

Am besten ich lasse nur A-Z, 0-9 und Leerzeichen zu. Das würde schon reichen, wenn es denn funktioneren würden...
 
G

Guest

Gast
Muss es denn unbedingtein spezieller Name sein oder tut es vielleicht auch eine fortlaufende Nummerierung oder ein timestamp.toString?
 

TypusMensch

Mitglied
Hat sich soeben erledigt. Hab grad in den JavaDocs gelesen, dass sich beim ersten Parameter um Regex (Reguläre Ausdrücke) handelt. Folgendes funktioniert jetzt bei mir:

Code:
private String convertToFileSystemChar(String name) {
    name.replaceAll("[^a-zA-Z0-9 ]", "");
    return name;
}

Edit: Muss ein konkreter Name sein.
 

TypusMensch

Mitglied
Gut, es war ja auch schon spät. Verdammt.

Ein Aufruf von:
System.out.println(convertToFileSystemChar("Test? Ja, die ist ein Test!"));
... bringt ...
"Test? Ja, die ist ein Test!"

Irgendwie ist mir die Methode replaceAll() scheinbar nicht ganz klar. Hat jemand eine Erklärung?

Edit:
Sollte öfters mal in "Java is och ne Insel" reinguggn. Die Version funktioniert jetzt aber wirklich:

Code:
private String convertToFileSystemChar(String name) {
    String erg = "";
    Matcher m = Pattern.compile("[a-zA-Z0-9 ]").matcher(name);
    while (m.find()) {
        erg += name.substring(m.start(), m.end());
    }
    return erg;
}

Der Vollständigkeit würde ich mich trotzdem über eine funktionierende replaceAll() - Methode freuen :)

Edit2:
Ach man, ihr schlaft ja noch alle! replaceAll() gibt nen String zurück und wertet ihn nicht auf die angegebene Instanz aus. Manchmal sieht man den Wald vor lauter Bäumen nicht :autsch:

Nun aber:
Code:
private String convertToFileSystemChar(String name) {
    return name.replaceAll("[^a-zA-Z0-9 ]", "");
}

Hätte ich auch schon an dayaftereh's Beitrag sehen müssen :cry:
 

TypusMensch

Mitglied
Ok, vielen Dank. Jetzt will das Ganze soweit erweitern, dass Leerzeichen vorne und hinten abgeschnitten werden. Vorne funktioniert das wunderbar, hinten aber nicht.

Javadoc sagt:
^ = The beginning of a line
$ = The end of a line

Die beiden Zeilen unterscheiden sich auch dadurch nicht wirklich viel voneinander. Dennoch klappt nur eine von beiden.

Code:
private String convertToFileSystemChar(String name) {
    name = name.replaceAll("[^a-zA-Z0-9 ]", ""); 
    name = name.replaceAll("^ *", "");
    name = name.replaceAll("$ *", "");
    return name;
}
 

musiKk

Top Contributor
$ muss an den Schluss, sonst bringts nicht die gewuenschte Wirkung. Also praktisch
Code:
replaceAll(" *$", "");
Deine gewuenschte Funktion liefert aber auch String.trim().
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
izoards doc to pdf Konvertieren... Allgemeine Java-Themen 43
M Java 8 nach Java 6 konvertieren Allgemeine Java-Themen 7
J Java zu C# konvertieren? Allgemeine Java-Themen 4
K Methodenaufruf mit String / String zu Objekt konvertieren Allgemeine Java-Themen 8
RalleYTN float in WORD konvertieren Allgemeine Java-Themen 1
RalleYTN JOGL Texture in BufferedImage konvertieren Allgemeine Java-Themen 1
C String zu Int konvertieren Allgemeine Java-Themen 9
P List<Type> Konvertieren in List<List<Type>> Allgemeine Java-Themen 3
RalleYTN Audiodatein(.ogg/.wav) in Text konvertieren Allgemeine Java-Themen 0
M ArrayList mit verschiedenen Datentypen in String konvertieren Allgemeine Java-Themen 10
B .txt Datei in einen kompletten String konvertieren Allgemeine Java-Themen 20
C String in double[][] konvertieren! Allgemeine Java-Themen 5
R MS Word in PDF konvertieren Allgemeine Java-Themen 1
M ArrayList<Foo> in ein Foo[] konvertieren? Allgemeine Java-Themen 8
P Datentypen String-Daten zu Byte-Zahlen konvertieren - Komme nicht weiter nach vielem versuchen :-/ Allgemeine Java-Themen 7
M Datentypen ArrayList in Integer konvertieren Allgemeine Java-Themen 3
D Programm in JApplet konvertieren... Allgemeine Java-Themen 4
K Image zu BufferedImage konvertieren Allgemeine Java-Themen 9
J String mit "," in Double Wert konvertieren Allgemeine Java-Themen 7
H Input/Output Binäre Daten konvertieren, Output hat Zeilenumbrüche?? Allgemeine Java-Themen 9
S byte [] in string und zurück konvertieren Allgemeine Java-Themen 2
S Millisekunden in Zeitcode konvertieren. Unerwarteter Effekt..? Allgemeine Java-Themen 8
T JPG zu PNG konvertieren Allgemeine Java-Themen 3
P Tonspur aus Video extrahieren und konvertieren Allgemeine Java-Themen 2
R byte[] to String Konvertieren Allgemeine Java-Themen 14
A Input/Output Buffered Image zu Byte Array und zurück konvertieren Allgemeine Java-Themen 4
S Zahl konvertieren [Internationalisierung l10n, l18n] Allgemeine Java-Themen 4
L hunderstel Sekunden in mm:ss:hshs konvertieren Allgemeine Java-Themen 4
T Interger in String konvertieren Erklärung benötigt Allgemeine Java-Themen 11
R Moeglichst viele Datumsstrings in Date Objekte konvertieren? Allgemeine Java-Themen 3
P PNG 32 Bit zu 16Bit konvertieren... Allgemeine Java-Themen 4
Daniel_L RegEx: UBB in HTML konvertieren, Problem Verschachtelung Allgemeine Java-Themen 3
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
2 MP3 in Wav konvertieren. Allgemeine Java-Themen 5
K Zeichensatz in UTF8 konvertieren Allgemeine Java-Themen 7
S List<Double> oder Double[] in double[] zu konvertieren Allgemeine Java-Themen 6
B numerisch in alpanumerisch konvertieren Allgemeine Java-Themen 3
Z Uralt-Applet in JFrame Anwendung konvertieren Allgemeine Java-Themen 12
S Integer zu int konvertieren - JUnit Allgemeine Java-Themen 12
F Unicode zu ASCII konvertieren Allgemeine Java-Themen 5
P Sämtliche Zeichensätze nach UTF-8 konvertieren Allgemeine Java-Themen 6
B String in Hex konvertieren: Problem Allgemeine Java-Themen 9
F Code konvertieren Allgemeine Java-Themen 4
G Array/String aus Request wieder in Array konvertieren Allgemeine Java-Themen 2
M Wave file ins Ogg Format konvertieren! Allgemeine Java-Themen 3
A DOC in TIFF konvertieren Allgemeine Java-Themen 2
P word zu pdf konvertieren Allgemeine Java-Themen 5
G Konvertieren: Wikipedia-Formatierung -> HTML Allgemeine Java-Themen 5
cowabunga1984 Library um TIF in PDF zu konvertieren Allgemeine Java-Themen 2
S int nach Ascii konvertieren Allgemeine Java-Themen 2
F Wav to mp3 konvertieren Allgemeine Java-Themen 3
G Datum konvertieren Allgemeine Java-Themen 14
R Fehler in WindowsXP oder Java? - double in int konvertieren Allgemeine Java-Themen 10
G Benutzereingaben konvertieren(Exponentialfunktion) Allgemeine Java-Themen 9
K Object nach Vector konvertieren Allgemeine Java-Themen 3
T Musikdateien in ein anderes Musikdateienformat konvertieren Allgemeine Java-Themen 5
T ArrayList in String[] konvertieren. Allgemeine Java-Themen 3
M Value als String in beliebige Klasse konvertieren Allgemeine Java-Themen 18
G Bild von RGB in Grayscale konvertieren Allgemeine Java-Themen 2
T Datum konvertieren Allgemeine Java-Themen 3
R HTML Seiten in formatierte Textseiten konvertieren Allgemeine Java-Themen 3
R StringWriter konvertieren in einen String !!! Allgemeine Java-Themen 2
O Dateinamen mit Zahl um eins erhöhen Allgemeine Java-Themen 16
lewbue Eclipse Eclipse Dateinamen in Hieroglyphen Allgemeine Java-Themen 4
B Stringmanipulationen beim Dateinamen Allgemeine Java-Themen 8
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
S Alle Dateinamen ermitteln Allgemeine Java-Themen 22
Elyt Compiler-Fehler Datei kann nicht erstellt werden. Die Syntax für den Dateinamen etc. ist falsch. Allgemeine Java-Themen 2
MiMa Illegal char im Dateinamen Allgemeine Java-Themen 14
MiMa Umlaute beim Einlesen von Dateinamen Allgemeine Java-Themen 12
R Besondere Zeichen in Dateinamen Allgemeine Java-Themen 4
I FTP Probleme mit Umlauten in Dateinamen Allgemeine Java-Themen 5
W Dateinamen dynamisch Parsen Allgemeine Java-Themen 12
9 Dateinamen erfassen und vergleichen Allgemeine Java-Themen 6
M Charset Encoding für Dateinamen Allgemeine Java-Themen 4
J Dateinamen beim Start auslesen Allgemeine Java-Themen 10
S Problem mit / im Dateinamen Allgemeine Java-Themen 3
G Syntax für den Dateinamen Allgemeine Java-Themen 1
M Dateinamen ändern Allgemeine Java-Themen 3
G Linux Dateinamen Charset Probleme Allgemeine Java-Themen 8
C Dateinamen auslesen? Allgemeine Java-Themen 23
F Alle Files im Ordner nach Dateinamen durchsuchen Allgemeine Java-Themen 28
P Dateinamen mit regulärem Ausdruck testen Allgemeine Java-Themen 9
P Dateinamen testen? Schreibrechte auf Verzeichnis testen? Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben