.xml-Dateien werden nicht gefunden

Devilness

Grünschnabel
Hallo,

ich habe (mal wieder) ein kleines Problem. Ich versuche aus einem Unterordner die Namen von .xml-Dateien in ein Array zu packen und diese dann in einem Dropdown-Menü (bzw. ein JComboBox) ausgeben zu lassen.

Das eigentliche Problem: In diesem besagten Unterordner liegen schon zwei Dateien diesen Typs, aber Java findet sie nicht. Das Merkwürdige ist, dass das fast identische Prozedere mit .csv-Dateien funktioniert...

Hier mal der Quellcode für die .xml-Dateien:
Code:
	public void createLoadFrame(Container pane){		// Erstellt eine neuen NewFrame
		pane.setLayout(null);
		
		// Die Buttons
		okay = new JButton("Okay");
        cancel = new JButton("Abbruch");

        pane.add(okay);
        pane.add(cancel);

        Insets insets = pane.getInsets();
        Dimension size = okay.getPreferredSize();
        okay.setBounds(75 + insets.left, 125 + insets.top,
					   size.width, size.height);
		okay.addActionListener(this);
		okay.setActionCommand("loadkay");
        size = cancel.getPreferredSize();
        cancel.setBounds(150 + insets.left, 125 + insets.top,
						 size.width, size.height);
		cancel.addActionListener(this);
		cancel.setActionCommand("can");
		
		// Dropdown für Quelldateien
		File userdir = new File("./XML");
		ArrayList<String> files = new ArrayList<String>();
		
		for (String entry : userdir.list(new TxtFilenameFilter())) {
			files.add(entry);
		}
		System.out.println("Anzahl der gefundenen Dateien " + files.size());
		
		int fSize = files.size();
		
		String[] fileArray = new String[fSize];
		for(int i = 0; i < fSize; i++) {
			fileArray[i] = files.get(i);
			System.out.println(i + ": " + fileArray[i]);
		}
		comboVar = fileArray[0];
		
		listXML = new JComboBox(fileArray);
		pane.add(listXML);
		listXML.setSelectedIndex(0);
		size = listXML.getPreferredSize();
		listXML.setBounds(25 + insets.left, 25 + insets.top,
							size.width, size.height);
		listXML.addActionListener(this);
		listXML.setActionCommand("combo");
		
		System.out.println("Creating loading frame... done!");
	}

Es handelt sich hierbei um eine ArrayIndexOutOfBoundsException. Zum vergleich mal der funktionierende Code für .csv-Dateien:
Code:
public void createNewFrame(Container pane){		// Erstellt eine neuen NewFrame
		pane.setLayout(null);
		
		// Die Buttons
		okay = new JButton("Okay");
        cancel = new JButton("Abbruch");

        pane.add(okay);
        pane.add(cancel);

        Insets insets = pane.getInsets();
        Dimension size = okay.getPreferredSize();
        okay.setBounds(75 + insets.left, 125 + insets.top,
					   size.width, size.height);
		okay.addActionListener(this);
		okay.setActionCommand("newkay");
        size = cancel.getPreferredSize();
        cancel.setBounds(150 + insets.left, 125 + insets.top,
						 size.width, size.height);
		cancel.addActionListener(this);
		cancel.setActionCommand("can");
		
		// Dropdown für Quelldateien
		File userdir = new File("./CSV");
		ArrayList<String> files = new ArrayList<String>();
		
		for (String entry : userdir.list(new TxtFilenameFilter())) {
			files.add(entry);
		}
		System.out.println(files.size());
		
		int fSize = files.size();
		
		String[] fileArray = new String[fSize];
		for(int i = 0; i < fSize; i++) {
			fileArray[i] = files.get(i);
			System.out.println(i + ": " + fileArray[i]);
		}
		comboVar = fileArray[0];
		
		listFiles = new JComboBox(fileArray);
		pane.add(listFiles);
		listFiles.setSelectedIndex(0);
		size = listFiles.getPreferredSize();
		listFiles.setBounds(25 + insets.left, 25 + insets.top,
							size.width, size.height);
		listFiles.addActionListener(this);
		listFiles.setActionCommand("combo");
		
		// Feld für Dateinamen der Zieldatei eingeben
		input = new JTextField(2);
		pane.add(input);
		input.setBounds(25 + insets.left, 75 + insets.top, 100, 25);
		
		System.out.println("Creating new frame... done!");
	}

Ich wär über jede Hilfe sehr froh :)

Gruß Devilness
 
Ich glaube kaum, dass ein TxtFileNameFilter xml-Dateien findet, eigentlich schon merkwürdig, dass er angeblich csv-Dateien findet, denn laut Spezifikation lässt er wirklich nur txt-Dateien zu... Ich schätze der Fehler tritt hier auf: comboVar = fileArray[0], ohne gefundenen Wert gibt es nicht mal diesen Eintrag.

Aber davon mal abgesehen, habe ich das Gefühl, du läufst auf dem Weg auf die andere Straßenseite noch 3x um den Block. Nur mal zum Verständnis... Du holst dir ein String-Array der gefundenen Dateien, schreibst diese Eintrag für Eintrag in eine ArrayList, um diese dann Eintrag für Eintrag wieder in ein String-Array zu schreiben, welche die ComboBox schließlich als Argument bekommt. Also warum zur Hölle schreibst du nicht:
Java:
listFiles = new JComboBox(userdir.list(new TxtFilenameFilter())); //hab den Filter einfach mal stur übernommen
Für deine comboVar (wofür die auch immer stehen mag) kannst du dann immernoch schreiben:
Java:
if(listFiles.getItemCount() > 0) comboVar = (String)listFiles.getItemAt(0);
else //falls Liste keine Einträge enthält...
 
Ich glaube kaum, dass ein TxtFileNameFilter xml-Dateien findet, eigentlich schon merkwürdig, dass er angeblich csv-Dateien findet, denn laut Spezifikation lässt er wirklich nur txt-Dateien zu
Ja, gehört auch nicht zum standard java. Im Netz geistern aber viele Implementationen rum wie
Java:
public class TxtFilenameFilter implements FilenameFilter {
  @Override public boolean accept( File f, String s ) {
    return new File(f, s).isFile() &&
           s.toLowerCase().endsWith( ".txt" );
  }
}
Entweder die csv-Dateien liegen mit der Endung txt vor oder die Implementierung wurde kurzerhand auf .csv umgebogen.
 
Öhm ja das würde es natürlich erklären ;) Aber damit hätten wir ja gleich ein Beispiel, wie sich Devilness selbst einen Filter bauen könnte...
 
Hallo und danke, dass ihr so schnell darauf geantwortet habt. Ich hab den Wald vor lauter Bäumen nicht gesehen -.- Natürlich liegts am txtFileFilter, so einen hab ich nämlich schon, aber halt für .csv-Dateien. Ich hab nämlich genau das, was Franz gepostet, hat selbst schon gefunden. Und eben an diesem Filter wirds gelegen haben. Ich werd das gleich mal korrigieren bzw neu schreiben. Und danke HonniCilest für die Tipps, ich werd das mal übernehmen :)
 
Ich möchte keinen Dialog. Ich will, dass nur Dateien eines bestimmten Datentyps, also z.B. .xml, in einem Dropdown-Menü erscheinen, wovon man sich eine Datei aussuchen soll. Der JFileChooser ist zwar ganz interessant, aber für meine Zwecke weniger geeignet, da er die Sache etwas verkomplizieren würde. Trotzdem Danke :D
 
Zurück