Verzeichnis auslesen - Dateien werden zu oft gespeichert

Hallo,

ich hab folgendes Problem. Wenn ich versuche mit meinem Code einen Ordner auszulesen und alle beinhalteten Dateien in eine Liste zu speichern, werden die Datein zu oft reingeschrieben. Hier ist mal der Code:

Java:
public ArrayList searchFile(File dir, String endung)
    {
        if(dir.isDirectory())
        {
            File[] files = dir.listFiles();
            if(files != null) {
                for(int i = 0; i < files.length; i++)
                {
                    if(files[i].isDirectory())
                    {
                        matches.addAll(searchFile(files[i], endung));
                    }
                    if(files[i].getName().endsWith(endung))
                    {
                        matches.add(files[i]);
                    }
                }
            }
        }
        else
        {
            matches.add(dir);
        }
        return matches;
    }

Ich rufe jetzt diese Methode so auf:
Code:
searchFile(new File("C:/Anime/Musik/"), ".wav")
In dem angegebenen Ordner sind diese Dateien enthalten (nach Alphabetischer Reihenfolge):

Albtraum.wav
Bloody Tears.wav
Bloody TearsBegin.wav
FFVI BattleTheme.wav
FFVI BattleThemeBegin.wav
Krias Theme.wav
Kiras ThemeBegin.wav
Neuer Ordner
Out Of Control.wav
Out Of CobtrolBegin.wav
The Gates Of Hell.wav

"Neuer Ordner" enthält:
Kiras Theme.wav
Kiras ThemeBegin.wav
Out Of Control.wav
Out Of ControlBegin.wav

Wenn ich die Methode aufrufe und danach die Elemente der Liste auslese kommt folgende ausgabe:

C:\Anime\Musik
C:\Anime\Musik\Albtraum.wav
C:\Anime\Musik\Bloody Tears.wav
C:\Anime\Musik\Bloody TearsBegin.wav
C:\Anime\Musik\FFVI Battle Theme.wav
C:\Anime\Musik\FFVI Battle ThemeBegin.wav
C:\Anime\Musik\Kiras Theme.wav
C:\Anime\Musik\Kiras ThemeBegin.wav
C:\Anime\Musik\Neuer Ordner\Kiras Theme.wav
C:\Anime\Musik\Neuer Ordner\Kiras ThemeBegin.wav
C:\Anime\Musik\Neuer Ordner\Out Of Control.wav
C:\Anime\Musik\Neuer Ordner\Out Of ControlBegin.wav
C:\Anime\Musik\Albtraum.wav
C:\Anime\Musik\Bloody Tears.wav
C:\Anime\Musik\Bloody TearsBegin.wav
C:\Anime\Musik\FFVI Battle Theme.wav
C:\Anime\Musik\FFVI Battle ThemeBegin.wav
C:\Anime\Musik\Kiras Theme.wav
C:\Anime\Musik\Kiras ThemeBegin.wav
C:\Anime\Musik\Neuer Ordner\Kiras Theme.wav
C:\Anime\Musik\Neuer Ordner\Kiras ThemeBegin.wav
C:\Anime\Musik\Neuer Ordner\Out Of Control.wav
C:\Anime\Musik\Neuer Ordner\Out Of ControlBegin.wav
C:\Anime\Musik\Out Of Control.wav
C:\Anime\Musik\Out Of ControlBegin.wav
C:\Anime\Musik\The Gates Of Hell.wav

Warum hat er denn jetzt die Titel alle zweimal reingeschrieben?

Vielen Dank für eure Hilfe.

MfG,
PattXterminator
 

diel2001

Bekanntes Mitglied
Dann benutz doch einfach ein Set

Java:
 Set<String> set = new HashSet<String>(); //oder
 Set set = new HashSet();

Da gehen keine doppelten String Einträge rein
 

OliverKroll

Aktives Mitglied
Wenn du eine lokale Variable "matches" verwendest, dann geht es;):
Java:
import java.util.*;
import java.io.*;

public class Hauptprogramm
{
	public static ArrayList matches=new ArrayList();
	public static ArrayList liste1=new ArrayList();
	
	public static void main(String[] args)
	{
		liste1=searchFile(new File("src/pack1/"),"java");
		
		liste1=searchFile(new File("src/pack1/"),"java");
		
		System.out.println(liste1);
	}
	
	public static ArrayList searchFile(File dir, String endung)
    {
		ArrayList matches=new ArrayList();
		
        if(dir.isDirectory())
        {
            File[] files = dir.listFiles();
            if(files != null) 
            {
                for(int i = 0; i < files.length; i++)
                {
                    if(files[i].isDirectory())
                    {
                        matches.addAll(searchFile(files[i], endung));
                    }
                    if(files[i].getName().endsWith(endung))
                    {
                        matches.add(files[i]);
                    }
                }
            }
        }
        else
        {
            matches.add(dir);
        }
        return matches;
    }
}
 
Also hier der komplette Code:

Java:
import java.util.ArrayList;

import java.io.File;

public class Player
{



  // Anfang Attribute
    private ArrayList<File> matches = new ArrayList<File>();
    private ClipStreamer streamer;
    private File dir;
    private int tracknummer;
    private boolean neuladen;
  // Ende Attribute


    public Player(String pVerzeichnis)
    {
        dir = new File(pVerzeichnis);
        tracknummer=0;
        neuladen=false;
        searchFile(dir, ".wav");
        for(int i=0; i<matches.size(); i++)
        {
            System.out.println(matches.get(i)+"");   //Hier ist dann die Ausgabe
        }
    }

  // Anfang Methoden

    public ArrayList searchFile(File dir, String endung)
    {
        if(dir.isDirectory())
        {
            File[] files = dir.listFiles();
            if(files != null) {
                for(int i = 0; i < files.length; i++)
                {
                    if(files[i].isDirectory())
                    {
                        matches.addAll(searchFile(files[i], endung));
                    }
                    if(files[i].getName().endsWith(endung))                            //
                    {
                        matches.add(files[i]);
                    }
                }
            }
        }
        else
        {
            matches.add(dir);
        }
        return matches;
    }
    
    //Ab hier ist es eigentlich nicht mehr relevant, da diese Methoden nur noch
    //in Verbindung mit einer anderen Klasse benötigt werden - das funktioniert alles einwandtfrei
    public File getFile(int pIndex)
    {
        return matches.get(pIndex);
    }
    
    public ArrayList getList()
    {
        return matches;
    }
    
    public void laden(int pIndex)
    {
        try
        {
            streamer.stop();
        }
        catch(Exception e)
        {

        }
        String pfad = (String)matches.get(pIndex).getPath();
        try
        {
            streamer = new ClipStreamer(pfad);
            streamer.start();
        }
        catch(Exception e)
        {

        }
    }
    
    public void stop()
    {
        streamer.stop();
    }
    
    public void pause()
    {
        streamer.pause();
    }
    
    public void resume()
    {
        streamer.resume();
    }
    
    public long getLength()
    {
        return streamer.getLength();
    }
    
    public void volume(double pVolume)
    {
        streamer.volume(pVolume);
    }

    public void setTracknummer(int pNummer)
    {
        tracknummer = pNummer;
    }

    public int getTracknummer()
    {
        return tracknummer;
    }
    
    public void setNeuladen(boolean pLaden)
    {
        neuladen = pLaden;
    }

    public boolean getNeuladen()
    {
        return neuladen;
    }
    
    public void setPosition(long pMicroseconds)
    {
        streamer.setPosition(pMicroseconds);
    }
  // Ende Methoden
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P selectedItem aus einem Methodenerstellten JPanel auslesen. Spiele- und Multimedia-Programmierung 5
windl MP3-Tags von einem Inputstream auslesen Spiele- und Multimedia-Programmierung 5
T Minecraft Bukkit Plugin Text Datei auslesen Spiele- und Multimedia-Programmierung 1
R LWJGL: OpenGL Fehler - weitere Informationen auslesen möglich? Spiele- und Multimedia-Programmierung 2
V BufferedImage[] aus anderer Classe auslesen Spiele- und Multimedia-Programmierung 2
F Plugin Spracheinstellungen und Auslesen von Strings Spiele- und Multimedia-Programmierung 7
M pixel auslesen in JOGLE Spiele- und Multimedia-Programmierung 3
P Bild Pixelweise auslesen Spiele- und Multimedia-Programmierung 13
gsch Videotürsprechanlage Daten auslesen Spiele- und Multimedia-Programmierung 1
P MP3 Lied länge auslesen mit JMF Spiele- und Multimedia-Programmierung 3
A Minesweeper: Koordinaten auslesen Spiele- und Multimedia-Programmierung 3
A Wie kann ich die Dateigröße aus einem tiff auslesen? Spiele- und Multimedia-Programmierung 2
P Bild, Pixel- / Bereichsfarbe auslesen Spiele- und Multimedia-Programmierung 12
T Maximalen aktuellen x,y und z- wert auslesen Spiele- und Multimedia-Programmierung 4
J Positionen von JComponents aus GUI auslesen Spiele- und Multimedia-Programmierung 6
F Position eines Objektes auslesen. Spiele- und Multimedia-Programmierung 7
Taknax Minecraft: Export der Mod dupliziert Dateien Spiele- und Multimedia-Programmierung 0
Splayfer Zuweisen vn Dateien Spiele- und Multimedia-Programmierung 0
MiMa MP3 Dateien für Metadaten abgleichen Spiele- und Multimedia-Programmierung 0
J wav Dateien vergleichen Spiele- und Multimedia-Programmierung 3
E TMX - Dateien in Java laden Spiele- und Multimedia-Programmierung 1
I Sound Dateien abspielen Spiele- und Multimedia-Programmierung 9
Hercules Slick - .fon Dateien benutzen? Spiele- und Multimedia-Programmierung 6
D 3ds max dateien in java einbinden, 3d welt Spiele- und Multimedia-Programmierung 9
C Problem mit Abspielen von Audio-Dateien Spiele- und Multimedia-Programmierung 3
S Datenbank gesucht für Bilder(gif-dateien) Spiele- und Multimedia-Programmierung 5
J Dateien verbergen Spiele- und Multimedia-Programmierung 10
S shp-Dateien wie z.B in C&C RA2 Spiele- und Multimedia-Programmierung 4
B Java3D .obj dateien Spiele- und Multimedia-Programmierung 2
D *.blend Dateien in 3ds umwandeln? Spiele- und Multimedia-Programmierung 2
G wie kann ich jar dateien fürs handy kopatibel machen Spiele- und Multimedia-Programmierung 3
A Auf Dateien in *.jar zugreifen Spiele- und Multimedia-Programmierung 3
K Importieren von 3D-Dateien Spiele- und Multimedia-Programmierung 5

Ähnliche Java Themen


Oben