Spezialzeichen in Dateinamen

kzimny

Mitglied
Hallo,

wie können die Dateinamen unter Verwendung des korrekten Character Sets ausgeben werden?
Ein ähnlicher Beitrag zum Thema Character Set und Dateinamen hat mich leider nicht weiter gebracht.
http://www.java-forum.org/allgemeine-java-themen/144237-sonderzeichen-dateiname.html
Die Dateien werden aus verschiedenen Länder über eine Webanwendung upgeloadet.
Die Dateinamen enthalten länderspezifische Zeichen, welche wegen der Referenz von der Datenbank nicht geändert werden dürfen.
Meine Anwendung soll die Dateien übers FTP (Windows-Server) herunterladen und lokal abspeichern.
Der Code sieht folgendermassen aus:

Java:
import it.sauronsoftware.ftp4j.FTPClient;
import it.sauronsoftware.ftp4j.FTPFile;
import java.io.File;
import java.io.UnsupportedEncodingException;

public class FTPDownloadDirectoryTest {

    public static void main(String[] args) throws UnsupportedEncodingException 
    {
        String server = "";
        int port = 21;
        String user = "";
        String pass = "";
        //System.setProperty("file.encoding", "ISO-8859-1");
        System.out.println("Default Encoding = " + System.getProperty("file.encoding")); // es wird UTF-8 ausgegeben

        FTPClient ftpClient = new FTPClient();

        try {
                ftpClient.connect(server, port);
                ftpClient.login(user, pass);

                    // use local passive mode to pass firewall
                ftpClient.setPassive(false);
                ftpClient.setType(FTPClient.TYPE_AUTO);
                ftpClient.setAutoNoopTimeout(10000);
                ftpClient.setCharset("ISO-8859-1");//("Windows-1252");

                if(ftpClient.isCompressionSupported())
                    ftpClient.setCompressionEnabled(true);

                System.out.println("Connected");

                String remoteDirPath = "/pfad/auf/dem/server/";
                String saveDirPath = "c:/temp/pictures/";

                      
                FTPFile[] subFiles = ftpClient.list(remoteDirPath);

                int i = 1;
                if (subFiles != null && subFiles.length > 0) 
                {
                    for (FTPFile aFile : subFiles) 
                    {
                        String currentFileName = aFile.getName();
                        if (currentFileName.equals(".") || currentFileName.equals("..")) 
                                                        {
                                // skip parent directory and the directory itself
                                continue;
                        }

                        try
                        {
                            String sLocal = saveDirPath + currentFileName;
                            String sRemote = remoteDirPath + currentFileName;
                            File f = new File(sLocal);
                            ftpClient.download(sRemote, f);
                            System.out.println(i+" DOWNLOADED: " + f.getAbsolutePath());
                            i++;
                        }
                        catch (IllegalStateException ex) 
                        {
                            System.out.println(ex.getMessage());
                        }
                    }
                }

            // log out and disconnect from the server
            ftpClient.disconnect(true);

            System.out.println("Disconnected");
        } catch (Exception ex) {
                ex.printStackTrace();
        }
    }     
}

Die Download funktioniert solange keine Spezialzeichen wie ü,ä,á,ĉ,ł,ń,ž,å,ĵ usw. im Dateinamen auftauchen.
Taucht ein Spezialzeichen im Dateinamen auf kann die Datei nicht gefunden werden.
Mit der Einstellung: ftpClient.setCharset("ISO-8859-1"); können einige Zeichen korrekt interpretiert werden, viele anderen aber nicht.
Die Einstellung ftpClient.setCharset("UTF-8"); bringt keine Verbesserung. Habe ebenfalls versucht nur die
Dateinamen (die Variable currentFileName) wie folgt umzuwandelt: new String(currentFileName.getBytes(), Charset.forName("UTF-8")); ohne Erfolg.

Hat jemand ein Lösungsvorschlag für das Problem? Danke!
 

Gucky

Top Contributor
Kannst du den Client auf Unicode umstellen? Also auf ISO 10646, was laut Wikipedia praktisch das gleiche sei.
 
Zuletzt bearbeitet:

kzimny

Mitglied
es klappt leider nicht den Character set auf ISO 10646 umzustellen. Wusste jemand wie Syntax in Java ist? Mit der Einstellung ftpClient.setCharset("ISO-10646"); oder ftpClient.setCharset("ISO10646"); klappt es nicht. Zur Laufzeit erhalte ich folgende Fehlermeldung:

Code:
java.io.UnsupportedEncodingException: ISO-10646
	at sun.nio.cs.StreamDecoder.forInputStreamReader(StreamDecoder.java:52)
	at java.io.InputStreamReader.<init>(InputStreamReader.java:83)

Google kennt die Syntax ebenfalls nicht. Es ist nur über ISO-10646-UCS-2 oder ISO-10646-UCS-4 die Rede. Beide funktionieren aber nicht. Das Problem scheint an der Kodierung zu liegen, hat jemand Erfahrung mit der FTP Übertragung?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
monsterherz 2 Klassen daher Probs mit dem Dateinamen Java Basics - Anfänger-Themen 9
E Input/Output Datei anhand von Dateinamen einlesen Java Basics - Anfänger-Themen 5
T Classpath Zwei gleiche Dateinamen in verschiedenen Projekten möglich? Java Basics - Anfänger-Themen 13
NightmareVirus Java-Editor (G. Röhner): Fehlende Dateinamen Java Basics - Anfänger-Themen 1
it_is_all For-Schleife - Dateinamen fortlaufende Nummer Java Basics - Anfänger-Themen 2
R Input/Output Dateinamen aus Verzeichnis in Datei schreiben Java Basics - Anfänger-Themen 3
H nio Pfad aus Dateinamen extrahieren Java Basics - Anfänger-Themen 4
V Erste Schritte Dateinamen aus einer FIle[] in eine List Java Basics - Anfänger-Themen 11
L String wird nicht gespeichert / Probleme mit Dateinamen Java Basics - Anfänger-Themen 9
M Fileoutputstream: Linux Dateinamen mit Umlaute Java Basics - Anfänger-Themen 4
F Erste Schritte Pattern zum Zerlegen von selbstdefinierten Dateinamen Java Basics - Anfänger-Themen 7
E Erste Schritte Verzeichnis auslesen, Dateinamen in Array speichern :-( Java Basics - Anfänger-Themen 7
S JFileChooser - Dateinamen vorschlagen/Inhalt der Ausgabe prüfen Java Basics - Anfänger-Themen 3
N JComboBox mit Dateinamen befüllen Java Basics - Anfänger-Themen 7
S Dateinamen in txt einfügen Java Basics - Anfänger-Themen 2
StrikeTom Wie ermittel ich alle dateinamen in einem Ordner Java Basics - Anfänger-Themen 2
C0FFEE Anwendung soll eigenen Dateinamen referenzieren Java Basics - Anfänger-Themen 13
M Filtern von Dateinamen Java Basics - Anfänger-Themen 7
F Dateinamen auslesen und in File speichern! Java Basics - Anfänger-Themen 3
J Dateinamen umbennen Java Basics - Anfänger-Themen 4
I viele Dateinamen in ein String-Array mit File().list() Java Basics - Anfänger-Themen 4
W Dateinamen einlesen und Liste in .txt-Datei ausgeben. Java Basics - Anfänger-Themen 2
J Dateinamen für Download ändern! Java Basics - Anfänger-Themen 3
C Dateinamen Filtern Java Basics - Anfänger-Themen 10
O JFileChooser Filter an Dateinamen hängen Java Basics - Anfänger-Themen 4
L Klassen und Dateinamen Java Basics - Anfänger-Themen 7
A Dateinamen mit laufender Nummer erzeugen! Wie? Java Basics - Anfänger-Themen 9
N Eindeutige Dateinamen generieren Java Basics - Anfänger-Themen 17
G Alle Dateinamen in ein Choice ausgeben Java Basics - Anfänger-Themen 2
M Leerzeichen in Dateinamen ein Problem ? Java Basics - Anfänger-Themen 4
D Dateinamen vervollständigen Java Basics - Anfänger-Themen 17
G Dateinamen aus einem Verzeichnis ausgeben Java Basics - Anfänger-Themen 3
G Dateinamen ohne Endung ausgeben Java Basics - Anfänger-Themen 4
J Dateinamen ermitteln Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben