Files aus Ordner werden nicht eingelesen

somme_ma

Grünschnabel
Hallo,

habe folgendes Problem: Ich möchte aus einem Ordner (und dessen Unterordner) alle mp3-Files einlesen und zu meiner Song-Containerklasse hinzufügen. Einzelne Songs auswählen geht, aber jetzt mit der Ordnerfunktion liest er garnichts mehr ein.

Code:
private void findSongs(String path) {
		File f = new File(path);
		File[] files = f.listFiles();
		
		if (files != null) {
			for (int i = 0; i < files.length; i++) {
				if (files[i].isDirectory())
					findSongs(files[i].getAbsolutePath());
				else if (path.endsWith(".mp3")){
					Song s1 = new Song (path);
					songs.addSong(s1);
				}
			}
		}
		/*Song s1 = new Song (path);
		songs.addSong(s1);*/
	}

Vielen Dank schon einmal für eure Hilfe!
 

zerix

Hausmeister
Moderator
Hallo,

das ist ja auch klar. Wo fügst du denn die MP3s der Liste hinzu?
Code:
if (files[i].isDirectory())
   findSongs(files[i].getAbsolutePath());
else if (path.endsWith(".mp3")){
   Song s1 = new Song (path);
   songs.addSong(s1);
Du rufst die Methode zwar rekursiv auf, aber das auch nur, wenn das File-Object ein Ordner ist. Im else-Zweig überprüfst du dann, ob das was du übergeben hast, eine MP3-Datei ist. Da du aber immer nur ein Ordner übergibst, kann es nie eine MP3 sein.

Hab dir hier mal ein Beispiel fertig gemacht.
Code:
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;

public class FindMP3Example
{
  private List<File> list = null;

  public FindMP3Example()
  {
    list = new ArrayList<File>();

    findSongs(new File("C:/"), list);
    
    System.out.println(list);
    
  }

  public static void main(String[] args)
  {
    new FindMP3Example();
  }

  private void findSongs(File file, List mp3Collection)
  {
    if (file != null)
    {
      if (file.isFile())
      {
        if (file.getName().endsWith(".mp3"))
          mp3Collection.add(file);
      }
      else
      {
        File[] files = file.listFiles(new FileFilter(){

          public boolean accept(File pathname)
          {
            return pathname.isDirectory() || pathname.getName().endsWith(".mp3");
          }
          
        });

        if (files != null)
        {
          for (int i = 0; i < files.length; i++)
          {
              findSongs(files[i], mp3Collection);
          }
        }
      }
    }
  }

}

MFG

Sascha
 

somme_ma

Grünschnabel
Danke, du hast mir super helfen können!
Hab es etwas abgeändert für meine Bedürfnisse. Speichere nur die Pfade als Song, nicht als File. Jetzt muss ich als nächstes hinkriegen, dass er einen Song zu einer bestimmten Playlist hinzufügt...

Danke nochmal!