Ein File rekursiv in einem verzeichnis und dessen unterordnern suchen/finden

plop123

Grünschnabel
Hallo Leute

Ich habe keine ahnung wie ich es schaffen soll, eine datei zu finden von welcher ich nur weiss, dass diese sich in einem unterverzeichnis befindet.

Könnte mir da jemand helfen?

Gruss
Plop
 

ComFreek

Mod | @comfreek
Moderator
Weißt du denn, wie man eine Dateiliste rekursiv erstellt? So ähnlich sucht man auch eine Datei, nur dass man, wenn man die Datei gefunden hat, schon abbricht.

Hier ein wenig Pseudo-Code für dich:
Code:
Function SearchFile(name, dir)
  While (entry = GetNextEntry(dir)) {

    If (entry.Name == "." || entry.Name == "..") {
      continue;
    }

    If (entry.Type == DIRECTORY) {
      FoundFile = SearchFile(name, entry);
      if (FoundFile) {
        return FoundFile;
      }
    }

    Else If (entry.Type == FILE && file.Name == name) {
      return entry;
    }
  }
  return NULL;
}
 

I2oxxi

Mitglied
schau dir das mal an, das hab ich mal jmd gecoded um einen ordner auf allein datenträgern zu suchen, mit ein paar ädnerungen solltes du damit dein file suchen können ^^
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();
    }
    
}