Nach Ordner suchen

Asmodisixsixsix

Grünschnabel
Guten Tag.
So einen ähnlichen Thread gibt es hier bestimmt schon, trotzdem mache ich diesen hier mal auf, weil ich einfach zu entnervt bin, weiter zu suchen (suche mich seit ca. 1,5 h im Internet tot nach einer Lösung :( ).
Mein Problem:
Ich will ein Programm schreiben (ich will, Quellcode noch nicht vorhanden), in dem nach einem beliebigen Ordner im System gesucht werden kann, meinetwegen "RosaElefanten". Wenn man nach diesem Ordner sucht und er existiert, soll in einem JOptionPane der Pfad angezeigt werden.
Bitte um Hilfe.
Asmodisixsixsix
 

I2oxxi

Mitglied
Huhu :)
Also ich würd sagen das geht am besten indem du dir eine rekursive Methode schreibst.
Fängst halt im Root an zu suchen, und gehst immer tiefer rein, bis keine Ordner mehr zu finden sind.
Hat mich irgendwie gereizt und ich habs mal versucht, krieg bis jetzt aber nen Stackoverflow ... Aber werd mal weiter rumprobieren, ich poste hier schonmal die NICHT FUNKTIONIERENDE lösung, vllt kannst du dadraus ja schnell was funktionierendes basteln :p
Die Idee dahinter ist ja klar zu erkennen ^^

Java:
package Ordnersuche;
 
import java.io.File;
import java.io.FileFilter;

public class Suche {
	
	
    public static void main(String[] args)
    {
    	FileFilter f = new MyFile();
        System.out.println(Suche.sucheOrdner("myChat",File.listRoots(),f));
    }
    
    public static String sucheOrdner(String name, File[] files,FileFilter f)
    {

    	//RekursionsEnde
    	if(files.length==0||files==null)
    	{
    		return "Not Found!";
    	}
    	else
    	{
    		for(File file : files)
    		{
    			if(file.getName().equals(name)) //suche name in derzeitigen subordnern
    			{
    				return file.getPath();
    			}
    		}
    		
    		//wenn ordner noch nicht gefunden durchsuche subordner
    		for(File file : files)
    		{
    			if(file.listFiles(f)!=null)
    			{
    				String s = sucheOrdner(name,file.listFiles(f),f);
    				if(s!=null&&!s.equals("Not Found!"))
    					return s;
    			}
    		}
    	}
	
    	return "Not Found!";
    }
}

class MyFile implements FileFilter
{

	// Muster für files
	//da du einen ordner suchst, brauchen wir uns auch nur ordner angucken.
	//versteckte ordner sparen wir uns auch mal
	@Override
	public boolean accept(File pathname) {
		return pathname.isDirectory()&&!pathname.isHidden();
	}
	
}


Hab jetzt schon bischen dran gearbeitet aber ich weiß auch nicht weiter :p

EDIT:: So, habs am laufen, ist editiert, also der Code da oben funktioniert. Bei Fragen meld dich.
das ist so irgendwie rekursion und "try and error" gemischt xd
man geht halt von den roots aus.
geht dann ins erste rein, und sucht da, geht dan tiefer rein etc....
wenn nix mehr da ist zurück gehen und ein anderes element durchsuchen.


Könt aber sein das der bisl hängt, je nachdem wieviele Sachen du aufm PC hast und wo es liegt kann er ganz schön lange suchen ^^
 
Zuletzt bearbeitet:

Asmodisixsixsix

Grünschnabel
Erst mal danke für die Antworten.
Dann noch eine Sache:
Du hast geschrieben: Versteckte Ordner sparen wir uns einmal. Da gibt es nur ein Problem:
Ich suche nach einem versteckten Ordner. ;) Das hätte ich wahrscheinlich deutlicher klarmachen müssen.
Tut mir echt leid.
Gruß,
Asmodisixsixsix

EDIT:: So, hab einfach die Zeile
return pathname.isDirectory()&&!pathname.isHidden();
umgewandelt in:
return pathname.isDirectory();
So viel schaff sogar ich ;)
Danke für den guten Code.
Nochmalige Grüße und Dank an euch beide,
Asmodisixsixsix
 
Zuletzt bearbeitet:

I2oxxi

Mitglied
Also ....
wie du sieht, lasste ich mir vom File alle SubFile geben, alsi File.listFiles();
Dann gibts nen Filter den du dir einbauen kannst, wie ich gemacht hab:

Java:
class MyFile implements FileFilter
{
 
    // Muster für files
    //da du einen ordner suchst, brauchen wir uns auch nur ordner angucken.
    //versteckte ordner sparen wir uns auch mal
    @Override
    public boolean accept(File pathname) {
        return pathname.isDirectory()&&!pathname.isHidden();
    }
    
}

den Filter übergibst du dann und kanst ihn beliebig verändern.
er prüft halt währen der listFiles, ob die File eine gültige File ist, und nur wenn ja, kommt sie in die Liste.
um also auch versteckte ordner zu sehen änderst du
Java:
 public boolean accept(File pathname) {
        return pathname.isDirectory()&&!pathname.isHidden();
    }

in
Java:
 public boolean accept(File pathname) {
        return pathname.isDirectory();
    }


Falls du irgendwelche Aufrufe aus dem Code nicht kennst / verstehst, frag einfach :)


EDIT :: OK alles klar dann viel erfolg damit :). Versuch aber zu verstehen was da passiert, sonst wir dir das nicht viel bringen wenn du mal ein ähnliches problem hast :)
 
Zuletzt bearbeitet: