Files mit Umlauten ergeben keine Größe

visara

Mitglied
Hallo, ich möchte aus einem Verzeichnis die Größen aller Dateien aufaddieren.
Die Methode funktioniert zwar, aber nur solange in den Dateinamen keine Umlaute sind.
Wenn Umlaute sind, dann wird mir die Größe 0 für diese Datei angegeben.
Leerzeichen machen keine Probleme. Nur wenn Umlaute sind, funktioniert es nicht mehr.
Ich benutze die Methode File.length() um die Größe auszulesen.

Kann mir jemand behilflich sein, wie ich das Problem lösen kann?
 
Nächstes Mal verwende bitte deutsche Begriffe, wenn es sich nicht um klassen handelt! Anfangs dachte ich, mit Files meinst du java.nio.file.Files und nicht "Dateien". Aus diesem Grund habe ich folgendes Beispiel geschrieben und es funktioniert ohne Probleme:

Java:
public static void main(String... args) throws Exception {
	Path p = Paths.get( "C:", "TestOrdner" );
	Files.walkFileTree( p, new SimpleFileVisitor<Path>() {
		
		@Override
		public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) {
			try {
				System.out.print( "Name: " + path.getFileName() + ", " );
				System.out.println( "Größe: " + Files.size( path ) );
			} catch( IOException e ) {
				e.printStackTrace();
			}
			return FileVisitResult.CONTINUE;
		}
	} );
}

Ausgabe:

Code:
Name: DateiMitUmlautää.txt, Größe: 671
Name: DateiOhneUmlaut.txt, Größe: 418

Mit
Code:
File
funktioniert es übrigens auch einwandfrei:

Java:
public static void main(String... args) throws Exception {
	Path p = Paths.get( "C:", "TestOrdner" );
	Files.walkFileTree( p, new SimpleFileVisitor<Path>() {
		
		@Override
		public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) {
			System.out.print( "Name: " + path.toFile().getName() + ", " );
			System.out.println( "Größe: " + path.toFile().length() );
			return FileVisitResult.CONTINUE;
		}
	} );
}

Ausgabe:

Code:
Name: DateiMitUmlautää.txt, Größe: 671
Name: DateiOhneUmlaut.txt, Größe: 418


Du musst dich also klarer ausdrücken und evtl Code posten.
 
Danke schon mal für die schnelle Hilfe.

Ich zeige hier einfach mal den Code.

Java:
    public static long getDirectorySize(File dir) {
        long size = 0;
        String path = "";
        File[] files = dir.listFiles();
        if (files != null) {
          for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()) {
                path = files[i].toString();
                System.out.println(path +  " Size: " + files[i].length());
                size += getDirectorySize(files[i]);
            } 
            else {
              size += files[i].length();
              path = files[i].toString();
              System.out.println(path +  " Size: " + files[i].length());
            } 
          }
        }
        return size;
      }

Also ich möchte einmal die Gesamtgröße des eingegebenen Verzeichnisses und gebe auch immer noch die einzelnen Größen der Dateien aus.


Java:
public static void main(String[] args) {
        File f = new File("/Users/visara/Desktop/test2");
       System.out.println(getDirectorySize(f));
    }

Und das hier ist die Ausgabe
Code:
/Users/visara/Desktop/test2/mitUmlauteno??o??a??a??u??u??.pdfSize: 0
/Users/visara/Desktop/test2/ohneUmlaute.pdfSize: 28588
28588

Den rekursiven Teil ignoriere ich
 
Java:
File f = new File( "C:/TestOrdner" );
System.out.println( getDirectorySize( f ) );

Bei mir kommt:

Code:
C:\TestOrdner\DateiMitUmlautää.txt Size: 671
C:\TestOrdner\DateiOhneUmlaut.txt Size: 418
1089

Was für Zeichen hat denn deine Datei, das schaut ja nicht nur nach Umlauten aus, sondern nach irgendwelchen russischen Zeichen. Ich kann es nicht sagen, da es nur Fragezeichen sind, und die sind zumindest im Windows-System nicht in Dateinamen erlaubt.

Zeig auch mal, was
Code:
System.out.println( System.getProperty( "file.encoding" ) );
ausgibt.
 
Hmm, ich glaube es liegt daran, dass ich es auf OSX Lion teste.

wenn ich
Code:
System.out.println( System.getProperty( "file.encoding" ) );
ausführe kommt als Ausgabe "MacRoman".

Wenn es bei euch geklappt hat, denke ich mal es liegt an OSX.

Aber warum??

Die Originalnamen der Dateien sind:

mitUmlautenööääüü.pdf
ohneUmlaute.pdf
 
Starte mal dein Programm mit dem Parameter:

Code:
-Dfile.encoding="UTF-8"

Entweder in Eclipse setzen bei "Run Configuration"

oder indem du deine jar extern startest:

Code:
java -jar -Dfile.encoding="UTF-8" MeinApp.jar
 
Wenn ich das in die VM-Arguments eintrage, sieht die Ausgabe wie folgt aus:

Code:
/Users/visara/Desktop/test2/mitUmlautenoÔøΩÔøΩoÔøΩÔøΩaÔøΩÔøΩaÔøΩÔøΩuÔøΩÔøΩuÔøΩÔøΩ.pdfSize: 0
/Users/visara/Desktop/test2/ohneUmlaute.pdfSize: 28588
28588
UTF-8
 
Da bin ich überfragt...

Ich habe mein Programm mal mit MacRoman gestartet:

Code:
MacRoman
C:\TestOrdner\DateiMitUmlaut��.txt Size: 671
C:\TestOrdner\DateiOhneUmlaut.txt Size: 418
1089

Bei mir geht's sogar mit verrückten Zeichen...

Da kann ich dir leider nicht mehr weiterhelfen.
 
Echt komisch...
ich versuche mal irgendwas in OSX selbst zu ändern, falls ich etwas finde.

Aber bis hierhin schon einmal Danke 🙂

Vielleicht hat irgendjemand noch Erfahrungen gemacht bei nem Mac.

Edit: Aber bei dir wird wenigstens noch die Größe ausgelesen.
Wenn wenigstens die Größe richtig gelesen werden würde, wäre es jetzt nicht so tragisch, obwohl es halt auch komisch ist.
Aber auch das macht er ja nicht und gibt einfach nur 0 zurück.
 

Zurück
Oben