# array.length-Problem



## Lennyx (18. Nov 2009)

Huhu,
hab n sehr kurzes aber mir völlig unverständliches Problem:



```
String[] mp3s = dateien.list();
	System.out.println(mp3s.length);
```


Dieser Code gibt mir erst die Länge von mp3s aus, wie es sollte, wirft danach jeder eine NullPointerException in der unteren Zeile.
Ähnliches passiert an jeder Stelle, wo ich versuche mp3s.length aufzurufen.

Hat irgendjemand eine Idee?


----------



## eRaaaa (18. Nov 2009)

Lennyx hat gesagt.:


> Dieser Code gibt mir erst die Länge von mp3s aus, wie es sollte, wirft danach jeder eine NullPointerException in der unteren Zeile.



also ich bin der meinung dass das nicht sein kann! lasse mich aber gerne eines besseren belehren 
"dateien" ist ein objekt der klasse File nehm ich an (wenn nicht, zeig mal die list()-methode)?

vllt kannst du ja mal ein ausschnitt/beispielcode aus deiner anwendung geben, wo genau dieses problem auftritt.


----------



## Michael... (18. Nov 2009)

Was steckt denn hinter dateien.list() Vermutlich wird zwar ein deklariertes Array übergeben, aber die darin enthaltenen Elemente sind nicht initialisiert.


----------



## max40 (18. Nov 2009)

ist dateien ein File-Object?
wenn ja, dann mach vor dem list() ein


```
System.out.println("exists: " + dateien.exists());
System.out.println("isDirectory: " + dateien.isDirectory());
```

Dein array ist null wenn dateien kein Verzeichnis ist!


----------



## Lennyx (18. Nov 2009)

das ist ja gerade das eigenartige. 
richtig, dateien ist ein File-Objekt.
und ja, die länge von mp3s WIRD definitiv ausgegeben (16)
genaue Ausgabe:
16
Exception in thread "main" java.lang.NullPointerException
	at FindFiles.suchMP3s(FindFiles.java:32)
	at FindFiles.<init>(FindFiles.java:22)
	at FindFiles.main(FindFiles.java:60)


und noch komischer ist: ich habe zwischendurch eine Schleife geschrieben, die mir alle Elemente von mp3s ausgibt, und das is auch völlig korrekt geschehen, alle 16 Elemente wurden ausgegeben!

Im Übrigen hat der Code vor ner halben Stunde auch noch ohne Meckern funktioniert.
Dann kam das erste Mal diese Meldung und seitdem erscheint sie immer.

Ein mir absolut unbekanntes Phänomen ...


----------



## Lennyx (18. Nov 2009)

Achja, was ich vergaß:
ein if(dateien.exists()) hatte ich schon eingebaut - aber sonst könnten die mp3s-Elemente ja auch nciht ausgegeben werden, von daher kann der Fehler da ja auch nich liegen ..


----------



## ARadauer (18. Nov 2009)

> Im Übrigen hat der Code vor ner halben Stunde auch noch ohne Meckern funktioniert.


dann kompelierst du falsch oder das Verzeichns  ist verschwunden....



> <p> If this abstract pathname does not denote a directory, then this
> * method returns <code>null</code>.  Otherwise an array of


----------



## Lennyx (18. Nov 2009)

okay, ist vlt ne blöde Frage: aber wie "compiliert man falsch"??
und das Verzeichnis ist nicht verschwunden, ich sehe es deutlich vor mir. und wie sollte er dann Elemente aus mp3s lesen können? es ist ja eben nicht null!

Hier nochmal ein Code-Ausschnitt...


```
if(dateien.exists()){
    String[] mp3s = dateien.list();
    System.out.println(mp3s.length);
    if (mp3s.length==0 || mp3s.equals(null)){
        continue;
    } else{ ....
```


----------



## max40 (18. Nov 2009)

dann besser so machen, den deine ...equals(null) knallt sobald mp3s null ist

```
if(dateien.exists()){
    String[] mp3s = dateien.list();
    if (mp3s == null || mp3s.length==0 ){ 
        continue;
    } else{ ....
```


----------



## Lennyxy (18. Nov 2009)

Soll es ja auch.
Das ist ja gerade mein Abfangcode!
Aber das is soundso total irrelevant, weil den Code hab ich nur eingeschoben, um zu prüfen, wo der Fehler liegt.
Kann mit dem eigentlichen Fehler also nichts zu tun haben.
Die Meldung kommt grundsätzlich immer an einer Stelle, in der mp3s.length verwendet wird.
Warum auch immer ...


----------



## max40 (18. Nov 2009)

kannst du nicht deine komplette klasse mal zur Verfügung stellen, sonst werden wir wohl nicht weiterkommen


----------



## Lennyx (18. Nov 2009)

wird euch wohl kaum was bringen, aber bitte schön ...
und ich weiß, dass es nich allzu schön programmiert ist, is auch mehr so schnell dahingeschmissen, hauptsache es erfüllt seinen Zweck - was es ja bis vor kurzem auch getan hat ...
ChangeName befindet sich in einer anderen Klasse.

Und wie gesagt, egal, was ich rausstreiche, der Code knallt bei jedem Aufruf von mp3s.length, führt ihn meist jedoch trotzdem noch aus bis zu diesem Punkt (siehe erster Beitrag).

[Java]
import java.io.File;

public class FindFiles{

	public FindFiles(){
		suchMP3s();

	}

	public static void suchMP3s(){
		String[] files = getOrdner("Musik");
		for (int i=0; i<files.length; i++){
				File dateien = new File("Musik/" + files_);
				if(dateien.exists()){
				String[] mp3s = dateien.list();
				System.out.println(mp3s.length);
				if (mp3s.length==0 || mp3s.equals(null)){
					continue;
				} else{
					for(int j=0; j<mp3s.length;j++){
						if(mp3s[j].endsWith(".mp3")){
							ChangeName los = new ChangeName("Musik/" + files + "/" + mp3s[j], files);
						}
					}
				}
			}

		}
	}

	public static String[] getOrdner(String path){
		File ordner = new File(path);
		String[] files = ordner.list();
		return files;
	}

	public static void main(String[] args){
		FindFiles start = new FindFiles();
	}

}
[/Java]_


----------



## faetzminator (18. Nov 2009)

Warum verwendest du eigentlich immer [c]list()[/c] und nicht [c]listFiles()[/c]? Das würde deinen Code vereinfachen und verschnellern.


----------



## Lennyx (18. Nov 2009)

deswegen sagte ich ja, ich weiß, dass es nicht schön programmiert ist.
in dem Fall liegt es daran, dass ich erst später gesehn hab, dass es listFiles() gibt, und war zu faul das nochmal zu ändern xD


----------



## Michael... (18. Nov 2009)

Lennyx hat gesagt.:


> [Java=17]	if (mp3s.length==0 || mp3s.equals(null)){[/Java]


Das mit dem Prüfen der Länge auf 0 kannst Du Dir sparen da Deine for-Schleife sowie so die Abbruchbedingung <mp3s.length hat auf null prüft man so: 
	
	
	
	





```
mp3s == null
```
Welches ist denn die Codezeile in der die NullPointerExcpetion auftritt?


----------



## Lennyx (18. Nov 2009)

das hatte ich ja auch erst so, habs nur geändert, um zu gucken, ob da der Fehler liegt ...

und wo der Fehler auftritt, hatte ich bereits schon geschätzte 5x gesagt, z.b. im allerersten Beitrag ...

allein in der Zeile System.out.println(mp3s.length);


----------



## max40 (18. Nov 2009)

gibt es in dem Verzeichnis "Musik" was anderes ausser Ordner, also auch normale Dateien?


----------



## Lennyx (18. Nov 2009)

nein. an der struktur liegt es auch nicht. es hat ja bereits funktioniert, und das tut es interessanterweise teilweise immer noch.


----------



## Michael... (18. Nov 2009)

Lennyx hat gesagt.:


> [Java=13]	File dateien = new File("Musik/" + files_);
> if(dateien.exists()){
> String[] mp3s = dateien.list();
> System.out.println(mp3s.length);
> ...


_
Da dateien.exists() true liefert, kann meiner Meinung nach in Zeile 16 nur eine NPE werfen, wenn dateien kein Verzeichnis, sonderen eine Datei ist._


----------



## Lennyx (18. Nov 2009)

und warum sagt er deiner Meinung nach dann, dass mp3s.length 16 is und kann auch alle einzelnen Elemente ausgeben?


----------



## Michael... (19. Nov 2009)

Ich dachte es wird bei der Ausgabe der Länge eine NPE geworfen? Wie soll dann die 16 Zustande kommen?


----------



## bdb (19. Nov 2009)

Ich würde mir erstmal den Absoluten Pfad ausgeben lassen, damit du sicher bist, dass du auch auf das Schaust, was du erwartest.

```
System.out.println(dateien.getAbsolutePath());
```


----------



## Lennyx (19. Nov 2009)

Ich finds ja lieb von euch, dass ihr mir helfen wollt, aber ich wäre euch dankbar, wenn ihr auch alle meine Beiträge durchlesen würdet.
Das war ja mein Ausgangsproblem, dass erst die Länge ausgegeben wird, und dann TROTZDEM die Exception geworfen wird. Das hat mich ja gerade so sehr irritiert.
Und der Pfad stimmt immer noch, er gibt mir ja sogar die Datei(namen), die in mp3s drinstecken, korrekt aus!


----------



## wakoz (19. Nov 2009)

Lennyx hat gesagt.:


> Ich finds ja lieb von euch, dass ihr mir helfen wollt, aber ich wäre euch dankbar, wenn ihr auch alle meine Beiträge durchlesen würdet.
> Das war ja mein Ausgangsproblem, dass erst die Länge ausgegeben wird, und dann TROTZDEM die Exception geworfen wird. Das hat mich ja gerade so sehr irritiert.
> Und der Pfad stimmt immer noch, er gibt mir ja sogar die Datei(namen), die in mp3s drinstecken, korrekt aus!


Das liegt daran das der von dir gepostste code nicht der Fehler meldung entspricht (Zeilen Zahl) 

Was eine NullPointer ist brauch man nicht erklären  was aber mir gerne passiert ist das xxx.length() sich gene mal verzählt. 

Liefert length() die real länge oder die länge ab null? gibt ja zwei arten dies umzustzen. einmal mit length (keine methode) und dann halt mit der methode length.

eins von beiden zählt von 0 das andere macht noch +1

dann kann wenn man die Buchstaben von einem String x = "Hund" Zählt (Nur zum Beispiel) einmal 3 rauskommen und einmal 4.

Ist mir mal passiert  als ich die Länge einer Liste geprüft habe.

Wobei ich bei der fehlermeldung gerade etwas kurz finde (für das von mir beschriebende Senario)

MfG

PS: Keinen Plan wie das genau war, daher kann es sein das ich was falsches sage Aber halt was zum nachdenken, ob es vielleicht der Fehler ist.


----------



## Lennyx (19. Nov 2009)

Nein, die Zahl ist richtig. Ich kann ja sogar alle (16) Elemente ausgeben lassen.


----------



## Sonecc (20. Nov 2009)

Sry, aber wenn er die die Länge ausgibt, kann die Zeile keine Exception mehr werfen.


> allein in der Zeile System.out.println(mp3s.length);


Deine Aussage, dass der Fehler in der System.out.... Zeile liegt ist also quatsch...

Poste mal den konkreten, kompletten Code der Klasse (das was du da gezeigt hast, scheint ja nur ein Teil dessen zu sein) und dann kann man dir helfen

Zu guter Letzt... Etwas geduld mit denen die dir helfen wollen schadet nicht, dann gibts am Ende vl sogar noch welche, die dir auch helfen.
Also locker bleiben und dann kann man versuchen dir zu helfen.


----------



## Michael... (20. Nov 2009)

welcher Code steht den in der ursprünglichen Version der Klasse FindFiles.java in Zeile 32


----------



## ARadauer (20. Nov 2009)

wakoz hat gesagt.:


> was aber mir gerne passiert ist das xxx.length() sich gene mal verzählt.
> 
> Liefert length() die real länge oder die länge ab null? gibt ja zwei arten dies umzustzen. einmal mit length (keine methode) und dann halt mit der methode length.
> 
> ...


auf keinen Fall 

Java verzählt sich nicht!


----------



## Apokalypse (20. Nov 2009)

Zu deinem Problem, dir sind da diverse Fehler untergekommen:


Du hast zu spät geprüft ob der Ordner Musik exestiert
Du hast nie, darauf geprüft ob es sich um einen Ordner handelt,denn eine Datei wird dir keine Liste von Datein zurück geben können
Du bist, davon ausgegangen das in deinem Ordner Musik nur Ordner liegen, Ist aber nicht so also prüfe ob es sich um einen Ordner handelt

ich kommentiere dir die Fehler: 


```
import java.io.File;
 
public class FindFiles{
 
    public FindFiles(){
        suchMP3s();
        
    }
    
    public static void suchMP3s(){
        String[] files = getOrdner("Musik");
        for (int i=0; i<files.length; i++){
                File dateien = new File("Musik/" + files[i]);
               //Prüfe  zusätzlich ob 'datein' ein Ordner ist, denn nur ein Ordner enthält Dateien
                if(dateien.exists()){
                String[] mp3s = dateien.list();
                System.out.println(mp3s.length);
                if (mp3s.length==0 || mp3s.equals(null)){
                    continue;
                } else{
                    for(int j=0; j<mp3s.length;j++){
                        if(mp3s[j].endsWith(".mp3")){
                            ChangeName los = new ChangeName("Musik/" + files[i] + "/" + mp3s[j], files[i]);
                        }
                    }
                }
            }
 
        }
    }
    
    public static String[] getOrdner(String path){
        File ordner = new File(path);
        //Da ich(ordner), nicht exestiere gebe ich dir auch keine Liste zurück.
        //Also prüfe doch mal ob, ich üherhaupt existiere und ein Ordner bin
        String[] files = ordner.list();
        return files;
    }
    
    public static void main(String[] args){
        FindFiles start = new FindFiles();
    }
    
}
```

Gruß ich hoffe, ich konnte helfen


----------



## Lennyx (20. Nov 2009)

Sonecc hat gesagt.:


> Deine Aussage, dass der Fehler in der System.out.... Zeile liegt ist also quatsch...



Das dachte ich bis zu dem Moment, wo das passiert ist, auch! Glaubt mir doch mal bitte, dass genau das passiert.
Die Abfragen hab ich mir an dem Punkt gespart, wo alles funktioniert hat.
Und ich weiß, dass nur Ornder in Musik behandelt werden können, es sollen aber auch nur Ordner da rein, und da das Prog einfach nur seinen kleinen Zweck für mich erfüllen soll, war mir das schnurzpiepegal.
Die Klasse FindFiles habe ich euch mittlerweile vollständig gegeben.


----------



## Apokalypse (20. Nov 2009)

> Die Abfragen hab ich mir an dem Punkt gespart, wo alles funktioniert hat.
> Und ich weiß, dass nur Ornder in Musik behandelt werden können, es sollen aber auch nur Ordner da rein, und da das Prog einfach nur seinen kleinen Zweck für mich erfüllen soll, war mir das schnurzpiepegal.



Da sind eben aber nicht nur, Ordner drin. Schau mal rein, und lass dir versteckten Datein anzeigen.


----------



## Lennyx (20. Nov 2009)

wird alles angezeigt, es gibt keine versteckten dateien.


----------



## Sonecc (20. Nov 2009)

ich kann dir nur weiterhin raten mal den gesamten code zu posten, so kann niemand was sagen oder machen


----------



## Apokalypse (20. Nov 2009)

```
if(dateien.exists() && isDirectory())
```

Tu dir selber den Gefallen, und prüfe einfach das es ein Ordner ist^^


Und hier auch noch:

```
public static String[] getOrdner(String path){
        File ordner = new File(path);
        if(! (ordner.exists() && ordner.isDirectory()))
             throw new FileNotFoundException("Ordner  " + path + " existiert nicht");
        String[] files = ordner.list();
        return files;
    }
```


----------



## Lennyx (20. Nov 2009)

Och Mensch Leute  ... Das IST der gesamte Code.
Das einzige was fehlt ist die Rename-Klasse, was aber irrelevant ist, da der Fehler auftritt, bevor diese Klasse aufgerufen wird.


----------



## Apokalypse (20. Nov 2009)

Lennyx hat gesagt.:


> Och Mensch Leute  ... Das IST der gesamte Code.
> Das einzige was fehlt ist die Rename-Klasse, was aber irrelevant ist, da der Fehler auftritt, bevor diese Klasse aufgerufen wird.



Ja jetzt rate mal warum 
Weil sie während, der Erzeugung auftritt

```
public FindFiles(){
        suchMP3s();
        
    }
```

Schick mal den Stacktrace.


----------



## max40 (20. Nov 2009)

poste bitte nochmal deine akt. Klasse und die dazu passende Exception wo auch die Zeilennr stimmt!


----------



## Lennyx (20. Nov 2009)

klappe die 2. 

```
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.io.File;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;


public class FindFiles{

	public FindFiles(){
		suchMP3s();
		
	}
	
	public static void suchMP3s(){
		String[] files = getOrdner("Musik");
		for (int i=0; i<files.length; i++){
				File dateien = new File("Musik/" + files[i]);
				if(dateien.exists()){
				String[] mp3s = dateien.list();
				System.out.println(mp3s.length);
				if (mp3s.length==0 || mp3s==null){
					continue;
				} else{
					for(int j=0; j<mp3s.length;j++){
						if(mp3s[j].endsWith(".mp3")){
							ChangeName los = new ChangeName("Musik/" + files[i] + "/" + mp3s[j], files[i]);
						}
					}
				}
			}

		}
	}
	
	public static String[] getOrdner(String path){
		File ordner = new File(path);
		String[] files = ordner.list();
		return files;
	}
	
	public static void main(String[] args){
		FindFiles start = new FindFiles();
	}
	
}
```

Die Importmeldungen oben einfach ignorieren. Hab sie jetzt noch nich rausgelöscht. 

@Apokalypse, ich hab keine ahnung, was du mir sagen willst mit dem Zitat. 

Als Fehlermeldung mit vorangehendem Stacktrace:

FindFiles.<init>(FindFiles.java:22)
FindFiles.main(FindFiles.java:61)
16
Exception in thread "main" java.lang.NullPointerException
	at FindFiles.suchMP3s(FindFiles.java:33)
	at FindFiles.<init>(FindFiles.java:24)
	at FindFiles.main(FindFiles.java:61)


----------



## max40 (20. Nov 2009)

das ist nicht der stacktrace der 1 : 1 dem code entspricht!
also versuch es nochmal!


----------



## Lennyx (20. Nov 2009)

ach sry, die zeile für main stimmt natürlich nicht, weil ich paar kommentare innerhalb von main rausgelöscht hatte.
dürfte aber nich wichtig sein, main is ja jetzt nich so groß ^^
und alle anderen zeilen verschieben sich nicht

//ja, wie gesagt, fiel mir auch grad auf. 
originalzeile 61 im code ist:
FindFiles start = new FindFiles();

sonst is alles gleich.


----------



## max40 (20. Nov 2009)

dann mach das ganze nochmal ohne kommentar!
den nachfolgendes stimmt meiner meinung ja auch nicht

```
at FindFiles.<init>(FindFiles.java:24)
```


----------



## ARadauer (20. Nov 2009)

macht keinen sinn:  if (mp3s.length==0 || mp3s==null){

wemm mp3s null ist fliegst du, da du lenght aufrufst bevor du prüfst...

besser:
  if (mp3s==null || mp3s.length==0){


----------



## Apokalypse (20. Nov 2009)

@Lennyx Ich, hatte mal Müll erzählt

Hast du, die Tipps eigentlich mal umgesetzt ?
Der Fehler tritt in Kraft, da du in Zeile 31 von jedem datein Objekt.
Eine Liste hollst, ohne zu prüfen ob es sich um einen Ordner handelt.
Bei Normalen Datein wie MP3s würde er, dir eine leere(null) Liste zurück geben.  

Da deine Liste 'mp3s' null ist, und du in Zeile 32 auf ein Objekt zugreifst, was es gar nicht gibt.
Und daher wird in Zeile 32 eine NullPointerException geworfen.

```
if(dateien.exists() && dateien.isDirectory){
                String[] mp3s = dateien.list();
                System.out.println(mp3s.length);
```

Versuch es einfach mal, ich weiß nicht wie oft ich das schon sagte.
Und wie mir auch aufgefallen ist: 

```
mp3s.length==0 || mp3s==null
```
Das macht so keinen Sinn, die Reihenfolge ist verkehrt.
Du musst erst prüfen ob es Null ist und dann auf length prüfen
Das ist aber nicht der Ursprung, deines Problems, meiner Meinung nach


----------



## Lennyx (20. Nov 2009)

ähm.
okay. bin grad ratlos. die abfrage sagt mir true, dürfte also nichts ändern. gleichzeitig fällt die Exception weg.
Aber aus irgendeinem Grund führt er das Programm jettzt auch nicht mehr korrekt aus. Also es passiert irgendwie nichts mehr.
Dabei hat es ja schonmal funktioniert.

dieses Prog bringt mich noch ins Grab -.-


----------



## Apokalypse (20. Nov 2009)

Kurze zwischen Frage was sollte denn passieren^^
Und was heißt, es passiert nix^^


----------



## Lennyx (20. Nov 2009)

es passiert nichts, heißt, dass das programm nicht mehr das tut, was es tun soll, und bereits getan hat: dateien umbenennen ^^


----------



## ARadauer (20. Nov 2009)

Lennyx hat gesagt.:


> es passiert nichts, heißt, dass das programm nicht mehr das tut, was es tun soll, und bereits getan hat: dateien umbenennen ^^



ja! weil dein array null ist...Das wissen wir schon von anfang an ;-)

jetzt kriegst du keien npe mehr weil die if greift und das continue ausgeführt wird.

Hast du keinen Debugger, kannst du nicht einfach mal Schritt für Schritt durchsteppen?


----------



## Apokalypse (20. Nov 2009)

Also ich habe dein Programm mal ausprobiert, bei mir kann es alle Pfade der Mp3s finden und auch die Namen ermitteln. (Zwar mit ein paar Änderungen). Ehm ich weiß nicht wie, sinnvoll es ist eine Mp3 nach ihrem Ordner zu bennenen. Aber das ist dein Ding^^ 

Hier mein code: 


```
import java.io.File;
 
/**
 * @author YVKA
 *
 */
public class Test{
 
    /**
     * 
     */
    public Test(){
        suchMP3s();
        
    }
    
    /**
     * 
     */
    public static void suchMP3s(){
        String[] files = getOrdner("C:/Musik");
        for (int i=0; i<files.length; i++){
                File dateien = new File("C:/Musik/" + files[i]);
               //Hier lag der Hund begraben^^ 
               if(dateien.exists() && dateien.isDirectory()){
                String[] mp3s = dateien.list();
                System.out.println(mp3s.length);
               //Hier lag  auch der Hund begraben^^ 
                if (mp3s.length==0 ){
                    continue;
                } else{
                    for(int j=0; j<mp3s.length;j++){
                        if(mp3s[j].endsWith(".mp3")){
                            System.out.println("Source: Musik/" + files[i] + "/" + mp3s[j]);
                            System.out.println("Name: " + files[i]);
                        	//ChangeName los = new ChangeName("Musik/" + files[i] + "/" + mp3s[j], files[i]);
                        }
                    }
                }
            }
 
        }
    }
    
    /**
     * @param path
     * @return
     */
    public static String[] getOrdner(String path){
        File ordner = new File(path);
        String[] files = ordner.list();
        return files;
    }
    
    /**
     * @param args
     */
    public static void main(String[] args){
        Test start = new Test();
    }
    
}
```


----------



## max40 (20. Nov 2009)

Guck mal was folgender Code bei dir ausgibt:


```
import java.io.File;

public class FindFiles {

	public FindFiles() {
		suchMP3s(); // Die Methode kann auch direkt aus der Main aufgerufen
					// werden da static ist
	}

	public static void suchMP3s() {
		final File musicdir = new File("Musik");
		System.out.println("Musik-Dir: " + musicdir.getAbsolutePath());
		final File[] files = musicdir.listFiles();
		if (files == null) {
			System.out.println("Kein Musik Verzeichnis vorhanden!");
			return;
		}
		final int len = files.length;
		System.out.println("Anzahl Daten int " + musicdir.getAbsolutePath()
				+ ": " + len);
		for (int i = 0; i < len; i++) {
			final File dateien = files[i];
			final File[] mp3s = dateien.listFiles();
			if (mp3s == null) {
				System.out.println(dateien.getAbsolutePath() + " ist null");
				continue;
			}
			final int sublen = mp3s.length;
			System.out.println("Anzahl Daten in " + dateien.getAbsolutePath()
					+ ": " + sublen);
			for (int j = 0; j < sublen; j++) {
				if (mp3s[j].getName().endsWith(".mp3")) {
					
				// TODO: hier muss bestimmt auch noch was gemacht werden
					final ChangeName los = new ChangeName("Musik/"+ dateien.getName() + "/" + mp3s[j].getName(), files[i]);
				}
			}
		}
	}

	public static void main(final String[] args) {
		final FindFiles start = new FindFiles();
	}
    
}
```


----------



## Lennyx (20. Nov 2009)

ähm wird die datei doch gar nicht? ^^
die umbenennung findet ja erst in der rename-klasse statt.
und @aradauer:
mein array ist NICHT null, die schleife greift nicht (ich habs extra nochmal überprüft) und ich warte immer noch auf deine erklärung, wie mein array null sein und trotzdem die länge 16 haben kann


----------



## Apokalypse (20. Nov 2009)

Lennyx hat gesagt.:


> ähm wird die datei doch gar nicht? ^^
> die umbenennung findet ja erst in der rename-klasse statt.
> und @aradauer:
> mein array ist NICHT null, die schleife greift nicht (ich habs extra nochmal überprüft) und ich warte immer noch auf deine erklärung, wie mein array null sein und trotzdem die länge 16 haben kann


Schnallst du es nicht, er gibt dir eine 16 aus weil der Ordner den, du davor verarbeitet hast eine Größe von 16 hatte. Und der "Momentan"(der ja keiner ist) schmeißt dir, dann eine Exception

Falls du mir nicht glaubst dann mache, mal folgendes: 

```
...
if(dateien.exists() ){
                String[] mp3s = dateien.list();
                System.out.println(mp3s.length);
               //Hier lag  auch der Hund begraben^^ 
                if (mp3s.length==0  || mp3s.length == null ){
                    System.out.println("Oh nein ich bin doch kein Ordner mit Datein "); // <== Einfügen
                    continue;
                } else{
                    System.out.println("Ja ich bin ein Ordner"); // <== Einfügen
                    for(int j=0; j<mp3s.length;j++){
                     if(mp3s[j].endsWith(".mp3")){
...
```

Versuche es, und du wirst es verstehen


----------



## Lennyx (20. Nov 2009)

ach gottchen, alarm zurück xD
das ganze funktioniert doch ... also das programm verändert den namen der mp3s anhand der id3-tags. und es sah aus, als ob es nicht funktionieren würde,weil iwer so intelligent war, und den titel-id3tag zb mit 01 Carousel zu betiteln. genau sowas wollte ich ja ursprünglich vermeiden.
fiel mir auf, als ich mir die id3-tags ausgeben ließ. überprüfung mit nem andern mp3s-ordner, es funktioniert.

problem scheint also gelöst (auch wenn ich immer noch nich verstehe, wie, weil eigtl wurde vom ablauf her nix verändert, da isDirectory() immer true is und er nie in die abbruchschleife springt ...  geschweige denn wie er in einer zeile ne exception aufrufen und sie gleihczeitig aufrufen kann .....)

vielen dank an alle beteiligten und ihre mühen!!!
:toll: :applaus:


//und @ apokalypse, keine ahnung, warum du darauf kommst. der aktuelle ordner hat 16 dateien und der code wird richtig ausgeführt wie oben beschrieben. glaub mir einfach. ganz blöd bin ich nicht, auch als frau nicht, ich programmiere auch schon ein jahr lang ab und zu in java.


----------



## Apokalypse (20. Nov 2009)

```
@ apokalypse, keine ahnung, warum du darauf kommst. der aktuelle ordner hat 16 dateien und der code wird richtig ausgeführt wie oben beschrieben. glaub mir einfach. ganz blöd bin ich nicht, auch als frau nicht, ich programmiere auch schon ein jahr lang ab und zu in java.
```

Das habe ich nie gedacht, noch zum Audruck gebracht. 
Ich weiß, selber dank meiner Ausbildung , das man ab und an die einfachsten Fehler nicht sieht.

Nochmal, du gehst ja mehr als einen Ordner durch?! Richtig ?
Sagen wir dein Musik Verzeichnis angenommen sieht so aus:


```
├───New Folder 
├───tumbnail.db 
└───New Folder (3)
```

Dann zeigt er dir, Für Ordner New Folder die Richtige Anzahl der Mp3s an.
Aber sobald du aber auf eine Datei wie zumbeispiel: tumbnail.db  triffst.
Wirft er dir eine Exception. Das war damit gemeint.


----------



## Lennyx (20. Nov 2009)

nope, die .mp3-endung wird in der changename-klasse abgefragt 
und so werden die dateien einfach übersehen.


----------



## Apokalypse (20. Nov 2009)

Lennyx hat gesagt.:


> nope, die .mp3-endung wird in der changename-klasse abgefragt
> und so werden die dateien einfach übersehen.



Es ging um die Frage Ordner oder Datei.
Eine Datei, wie zumbeispiel tumbnail.db enthält keine anderen Datein, daher bekommst du bei einem dateien.list() ein Array das null ist. 

So das musst ich mal klar stellen.
Gut das es jetzt läuft.


----------



## Sonecc (20. Nov 2009)

werden sie nicht, da du vorher schon die dateien ansprichst


----------



## Apokalypse (20. Nov 2009)

Sonecc hat gesagt.:


> werden sie nicht, da du vorher schon die dateien ansprichst


ließ hier => In der Doku

Ohne eine Prüfung, auf isDirectory gibt es, kann es auch ein Null Array geben.


----------



## Lennyx (20. Nov 2009)

war es nicht.

is doch aber auch total irrelevant, darüber müssen wir doch nicht weiter diskutieren ^^


----------



## Apokalypse (20. Nov 2009)

Wie auch immer^^

Man sollte aus Fehlern lernen^^
Auch wenn da keine Datei, war man sollte immer prüfen ob die,
Eingabe auch der Entspricht die man erwartet.

Also in diesem Sinne.
HF


----------



## Sonecc (20. Nov 2009)

Apokalypse hat gesagt.:


> ließ hier => In der Doku
> 
> Ohne eine Prüfung, auf isDirectory gibt es, kann es auch ein Null Array geben.




mein beitrag war auf folgendes bezogen:


> nope, die .mp3-endung wird in der changename-klasse abgefragt
> und so werden die dateien einfach übersehen.


----------



## Apokalypse (20. Nov 2009)

Sonecc hat gesagt.:


> mein beitrag war auf folgendes bezogen:



Sry, mein Fehler


----------

