Directory auf .jpg-Bilder durchsuchen in Unterverzeichnissen

  • Themenstarter Themenstarter michael bauer
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
M

michael bauer

Gast
hallo,
ich habe eine frage, ich durchsuche eine ordner mit rekursiven aufrufen auf das vorkommen von bildern mit der endung ".jpg".
gefundene erkennt er und hängt sie in meinen JTree, das geht bis auf die tiefste ebene, solange aber auch mind. ein jpg-Bild mit im unterordner liegt.
es funktioniert nicht, wenn ich einen ordner zb Tiere habe, in dem ordner sind wieder weiter ordner, in denen wiederum bilder drin wären, er müsste hier souzusagen 2 ebenen tiefer springen, aber das bekomme ich nicht hin.
wenn ich aber nun in den ordner Tiere irgendein jpg_Bild kopiere, dann findet er plötzlichwieder die weiteren unterordner.
ich komme nicht weiter, wäre super wenn mir einer helfen könnte, vielleicht ist es nur eine kleinigkeit, ich poste mal meine klassen, ich weiß, dass das "drum-herum" fehlt, aber das wäre zuviel zum posten, das sind die hauptteile des durchsuchens.
vielen dank schon mal.
Micha

Code:
public void init() {
		   File dir = new File("C:/Bilder");
		   DefaultMutableTreeNode root;
		   root = new DefaultMutableTreeNode("C:/Bilder");
		   listDir(dir, root);
	}
	
	
	
	public void listDir(File dir, DefaultMutableTreeNode aktuell) {
		 File[] dirList = dir.listFiles();
		 DefaultMutableTreeNode child = null, subchild;
		 
		System.out.println("REKURSIVER AUFRUF listDir("+dir.toString());
		for (File file : dirList) {
			if(file.isDirectory() && isPicDirectory(file)==true){
					//if listed item is a file, call the visitor-method
					
					DefaultMutableTreeNode tmp_node = new DefaultMutableTreeNode(file.getName());
					System.out.println("Erzeuge "+tmp_node.toString());
					aktuell.add(tmp_node);
					
					 listDir(file, tmp_node);
				}
         }
		 tree = new JTree(aktuell);
	     tree.setRootVisible(true);
	}
	
	
	public boolean isPicDirectory(File dir){
		boolean retVal = false;

		File[] dirList = dir.listFiles();
		for (File file : dirList) {
			if(file.isDirectory()){
				//rufe listfiles auf und schaue ob ein jpg drin ist
					listFiles(file);
					System.out.println("Bin in... "+file.toString());
			}
			else{
				if(file.toString().endsWith(".jpg") || file.toString().endsWith(".JPG")){
					retVal = true;
					break;
				}
			}
}
		return retVal;
	} // end isPicDirectory
	
	
	public Collection<File> listFiles(File dir){
		
		ArrayList retVal = new ArrayList();
		File[] dirList = dir.listFiles();
		for (File file : dirList) {
			if(file.isDirectory()){
				//wenn verzeichnis, dann ruft er sich rekursiv selbst auf
					listFiles(file);
				
				
			}
			else{
				//recursion down into new found directory
				if((file.toString().endsWith(".jpg") || file.toString().endsWith(".JPG")){
				
					retVal.add(file);
				}
			}

		}
		return retVal;
	}  // end listFiles
 
Nun ja, ist doch klar:

Code:
public void listDir(File dir, DefaultMutableTreeNode aktuell) {
       File[] dirList = dir.listFiles();
       DefaultMutableTreeNode child = null, subchild;
      
      System.out.println("REKURSIVER AUFRUF listDir("+dir.toString());
      for (File file : dirList) {
         if(file.isDirectory() && isPicDirectory(file)==true){
               //if listed item is a file, call the visitor-method
               
               DefaultMutableTreeNode tmp_node = new DefaultMutableTreeNode(file.getName());
               System.out.println("Erzeuge "+tmp_node.toString());
               aktuell.add(tmp_node);
               
                listDir(file, tmp_node);
            }
         }
       tree = new JTree(aktuell);
        tree.setRootVisible(true);
   }

Hier prüfst Du, ob das File ein Ordner ist UND ob er Bilder enthält. Wenn ja, machst Du was, wenn nein machst Du nix. Du mußt hier als die Bedingung noch entsprechend aufbohren, daß Dein Programm entsprechend weiter macht, wenn die Bedingung nicht zutrifft.
 
Code:
         if(file.isDirectory() && isPicDirectory(file)==true){

hallo, erstmal danke,
ich schaffs nicht, hab die if-abfrage gesplittet, aber seh nichts, er geht keine 2 ebenen runter, nur wenn ein bild mit im ordner liegt,
hast du ne konkrete idee, wenn ja, wäre es super wenn du sie mir schickst, steh da echt grad sowas von aufm schlauch.
danke nochmal
Micha
 
Bau Dir ein kleines lauffähiges Testprogramm ohne das JTree-Gefrickel und probiere es im Kleinen aus. Wenn das nicht funktioniert, poste Dein lauffähiges Beispielprogramm, dann kann man Dir konkreter helfen.
 
Hier mal ein lauffähiges Beispiel ohne JTree:


Code:
import java.io.*;

public class Testrec {
	
	File root;

	public static void main(String[] args){
		new Testrec();
	}
	
	public Testrec(){
		root = new File("C:\\test");
		checkForString("txt",root);
	}

	private void checkForString(String string, File file) {

		File[] sub = file.listFiles();
		
		for(int i=0;i<sub.length;i++){

			if(sub[i].isDirectory()){
				checkForString(string,sub[i]);
			}else{
				if(sub[i].toString().endsWith(string)){
					System.out.println("Gefunden: " + sub[i]);
				}
			}
			
		}
		
	}
	
}

Ich habe halt mal nach txt-Endungen gesucht, weil das bei mir besser gepaßt hat 😉
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben