3 Stimmen

Lesen Sie eine Datei mit Leerzeichen im Namen mit Java?

Der Originalname der Datei ist 1_00100 0042.jpg. Ich habe ein Problem:

java.net.URISyntaxException: Ungültiges Zeichen im Pfad am Index 49: file:///opt/storage/user-data/attachments/1_00100\ 0042.jpg

Kannst du mir einige Lösungen geben, wie ich diese Datei mit diesem fehlerhaften Pfad erhalten kann? Ich weiß, dass C# die Path-Klasse hat. Gibt es etwas Ähnliches in Java?

Ich habe versucht, aber nicht erfolgreich:

private String replaceWhitespace(String str) {
    if (str.contains(" ")) {
        str = str.replace(" ", "%20");
    }
    return str;
}

4voto

Aboca Punkte 575

Verwenden Sie Datei, es funktioniert mit Leerzeichen:

String path = "file:///opt/storage/user-data/attachments/1_00100\\ 0042.jpg";
File f = new File(path);

Wenn Sie Leerzeichen durch %20 ersetzen möchten, verwenden Sie Regex:

path.replaceAll("\\u0020", "%20");

2voto

Pshemo Punkte 118094

Ich bin mir nicht sicher, woher du diesen Pfad bekommen hast, aber ich nehme an, dass \ vor dem Leerzeichen hinzugefügt wurde, um es zu escapen, also musst du deine Methode ändern, um auch dieses \ vor dem Leerzeichen zu entfernen.
Da diese Methode auch den Zustand der Instanz Ihrer Klasse nicht beeinflusst, können Sie sie static machen.

private static String replaceWhitespace(String str) {
    if (str.contains("\\ ")) {
        str = str.replace("\\ ", "%20");
    }
    return str;
}

Demo:

String file = "file:///opt/storage/user-data/attachments/1_00100\\ 0042.jpg";
file = replaceWhitespace(file);

URI u = new URI(file);
System.out.println(u.getRawPath());
System.out.println(u.getPath());

Ausgabe:

/opt/storage/user-data/attachments/1_00100%200042.jpg
/opt/storage/user-data/attachments/1_00100 0042.jpg

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X