FilenameFilter verwenden

HISTORY

Mitglied
Hallo zusammen.

Ich habe eine Frage zu FilenameFilter.
Ich möchte eine Applikation erstellen mit mit der ich Notizen schreiben und anschauen kann. Angenommen die Notizen sind erstellt und in meinem Verzeichnis "Notizen" gespeicher mit der Dateiendung .quickLaunch^^.

Nun möchte ich mit meinem NotizManager das Verzeichniss auf dateien mit der Dateiendung .quickLaunch auslesen. Danach erstelle ich zu jeder Notiz einen Button über welchen ich die Datei / Notiz öffnen kann.

Das Ganze hab ich mir etwa so vorgestellt: intressant sind eigentlich nur die Methoden sucheNotizen() und createButtons().

Auf Zeile 36 bekomme ich einen java.lang.NullPointerException.
Meine Frage: Kann man das so in etwa bauen oder geht das gar nicht.
Zweite Frage: Wie funktioniert der FilenameFilter genau?

Code:
package nachricht;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FilenameFilter;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class NotizManager extends JFrame implements ActionListener{
	JLabel info = new JLabel("Kicken Sie auf einen der Buttons, um die Notiz zu betrachten");
	JPanel centerButtonPanel = new JPanel();
	String [] fileList;
	JButton[] buttons;
	
	public NotizManager(){
		super("Notiz Manager");
		setBounds(740, 300, 400, 400);
		setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
		
		createButtons();
		add(BorderLayout.NORTH, info);
		add(centerButtonPanel);
		setVisible(true);
		setResizable(false);
		
	}
	
	public void createButtons(){
		sucheNotizen();
		for (int i = 0; i < fileList.length; i++){
			String buttonName = fileList[i];
			buttons[i] = new JButton(buttonName);
			centerButtonPanel.add(buttons[i]);
		}
	}
	
	public void sucheNotizen(){
		File dir = new File("c:\\programme\\Notizen");
		fileList = dir.list(new FilenameFilter() {
		    public boolean accept(File d, String name) {
		       return name.endsWith(".quickLaunch");
		    }
		});
	}

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

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		
	}

}

Gruss

HISTORY
 

Fabio Hellmann

Erfahrenes Mitglied
Hi,
klar ist es eine Möglichkeit die Buttons so zu erzeugen und zur GUI hinzuzufügen. Es gibt viele Varianten je nach Codestyling und eigenem Geschmack. Aber prinizpiell kannst du es so natürlich machen.
Für deine zweite Frage reicht ein kurzer Blick in "Java ist auch eine Insel". ;)

Gruß

Fabio
 

HISTORY

Mitglied
Also ich konnte das Problem einschränken. Es liegt hier in dieser Methode.
Der Pfad ist richtig und die Datei hallo.quickLaunch usw. ist auch vorhanden.
Ich denke mal er kommt nicht ins accept herein. Wie ich das machen muss weis ich auch nicht genau.
Diesen Schluss ziehe ich daraus dass fileList einen nullPointer zurückgiebt, wenn ich das Programm debugge.

Java:
String [] fileList;
public void sucheNotizen(){
		File dir = new File("c:\\programme\\Notizen");
		fileList = dir.list(new FilenameFilter() {
		    public boolean accept(File d, String name) {
		       return name.endsWith(".quickLaunch");
		    }
	});
	}

Gruss HISTROY
 
Zuletzt bearbeitet von einem Moderator:

Akeshihiro

Erfahrenes Mitglied
Wäre dann schön, wenn du die Lösung auch online stellen könntest, damit andere mit dem gleichen Problem dann einen Ansatz haben ;)
 

HISTORY

Mitglied
Hier die Lösung:

Da ich mit dem FilenameFilter nicht zurecht gekommen bin, hab ich ein Verzeichnis aufm c:\ erstellt wo niemand in irgend einem Fall Dateien abspeichern würde.

So durchsuche ich nun das ganze:

Java:
public void sucheNotizen() {
		File dir = new File("C:/Notizen");
		fileList = dir.listFiles();
	}

Zu beachten ist, dass fileList ein Array ist in welches alle Dateien eingelesen werden.
Wenn man will, kann man das ganze noch durch ne for- Schleife laufen lassen und so die Dateiendung herauslesen, was ich aber jetzt mal nicht gemacht habe.

Gruss

HISTROY
 

Neue Beiträge