Ich habe ein Programm, dass im momentanen Status Verzeichnisse und Dateien auslesen soll. Durch eine Checkbox wird bestimmt, ob nur das gewählte Verzeichnis oder auch noch die Unterverzeichnisse durchsucht werden sollen. Die Verzeichnisse und die Dateien sollen in eine Liste eingetragen werden.
Was funktioniert:
- Endlich so gut wie alles!
Was nicht funktioniert und wie es funktionieren sollte:
- Wenn jCheckBox1 deaktiviert ist ( => String ext = "mp3" ) und jCheckBox2 aktiviert ( => Unterverzeichnisse in die Suche miteinbeziehen) , dann sollte das Programm alle Mp3 unterhalb meines BasisVerzeichnisses Suchen und in einem Vector auflisten. Allerdings findet er nur die Dateien im Basisverzeichnis.
[/code]
Was funktioniert:
- Endlich so gut wie alles!
Was nicht funktioniert und wie es funktionieren sollte:
- Wenn jCheckBox1 deaktiviert ist ( => String ext = "mp3" ) und jCheckBox2 aktiviert ( => Unterverzeichnisse in die Suche miteinbeziehen) , dann sollte das Programm alle Mp3 unterhalb meines BasisVerzeichnisses Suchen und in einem Vector auflisten. Allerdings findet er nur die Dateien im Basisverzeichnis.
[/code]
Code:
public String ext;
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
/** Variablendeklaration **/
if(jCheckBox1.isSelected())
ext = "";
else
ext = jTextField2.getText().trim(); // im Textfeld steht "mp3"
FileFilter ff = new FileFilter(); // Erstelle einen FileFilter für Verzeichnisse (siehe unten)
FilenameFilter fnf = new FilenameFilter(); // Erstelle einen FilenameFilter für Dateien (siehe unten)
[...]
File wDir = new File(String.valueOf(directoryChooser.getSelectedFile())); // Speichere Stammverzeichnis in wDir
/** Hier muss überprüft werden, ob "Include subdirectories"
* aktiviert ist
*/
if(jCheckBox2.isSelected()) {
/** Erstelle einen Vector, gefüllt mit alles Unterverzeichnissen
* und speichere ihn in das Array sDirectories[].
* Danach gib es in der Directory Liste aus.
*/
Vector vFiles = new Vector(10); // Absolute Dateinamen
getRecursive(new File(wDir.getPath()), vFiles, fnf);
/** Gib Dateien und Verzeichnisse in JList aus */
setDirectoryList(vDirectories);
setFilesList(vFiles);
}
}
/** Das ist der FileFilter, der nur
* Verzeichnisse herausfiltert.
*/
private class FileFilter implements java.io.FileFilter {
public boolean accept(File f) {
return f.isDirectory();
}
}
/** Das ist der FilenameFilter, der nur
* Dateien herausfiltert, die der Dateiendung
* in JTextfield1 entsprechen. Aber auch
* Verzeichnisse, damit die Rekursive Methode
* getRecursive(File basedir, Vector files, FilenameFilter fnf)
* funktioniert.
*/
private class FilenameFilter implements java.io.FilenameFilter {
public boolean accept(File dir, String file) {
return file.toLowerCase().endsWith(ext.toLowerCase()) || new File(dir.getPath()+file).isDirectory();
}
}
public void getRecursive(File basedir, Vector files, FilenameFilter fnf) {
File[] f = basedir.listFiles(fnf);
for(int i = 0; i < f.length; i++) {
if(f[i].isFile()) files.add(f[i]);
if(f[i].isDirectory()) {
getRecursive(f[i], files, fnf);
}
}
}
public void setDirectoryList(Vector dir) {
jList1.setListData(dir);
if(dir.size() == 1)
jLabel4.setText(dir.size() + " directory selected");
else
jLabel4.setText(dir.size() + " directories selected");
}
public void setFilesList(Vector files) {
jList2.setListData(files);
if(files.size() == 1)
jLabel5.setText(files.size() + " file selected");
else
jLabel5.setText(files.size() + " files selected");
}