2016-08-26 1 views
0

Ich verwende Jsoup, um eine Liste der Dateien in einem angegebenen Verzeichnis zurückzugeben. Ich dies zu erreichen mit folgendem Code:Geben Sie das Verzeichnis mit 2 Ebenen zurück, falls zutreffend, mit Jsoup

public List<String> getDirectoryListing(String urlPath)throws{ 
    InitParams ip = new InitParams(); 
    Elements links; 
    List<String> directoryListing = new ArrayList<>(); 

    try{ 
     Document doc = Jsoup.connect("http://" + urlPath).get(); 

     links = doc.select("body a"); 
     for (Element link : links){     
      directoryListing.add(link.text()); 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 

    return directoryListing; 
} 

Ich habe jedoch anderen Fall, in dem es mit der Datei in einer anderen Ordner ihm in diesem sein könnte.

Ich muss überprüfen, ob dies ein Verzeichnis zurückgibt, und wenn das der Fall ist, gehen Sie hinein und geben Sie die Datei zurück.

Weiß jemand, wie man das macht?

Antwort

1

Sie benötigen dort eine rekursive Logik, in der sich die Methode selbst auflistet, um Dateien in Unterordnern aufzulisten. Es wird dann so viele Ebenen tief gehen, wie Sie brauchen. Sie benötigen ein komplexeres Objekt als eine Zeichenfolge, die Kinder enthalten kann. Ich würde deine eigene Klasse machen.

Pseudo-Code, so etwas wie dieses, das ist nicht übersetzbar, aber es leitet der Algorithmus

public List<WebFile> getFiles(urlPath) { 
    List webFiles = new web files list; 

    List urlFilesList = methodToGetWebFilesList(urlPath); 
    foreach urlFile in urlFiles { 
     //constructor has logic to parse whatever is in URL file and 
     //determine if it is a director 
     WebFile webFile = new WebFile(urlFile); 

     if "webFile" is a directory { 
     //recursive call to self, drill down into this file 
     children = getFiles(urlFile); 
     webFile.children.addAll(children); 
     } 
    } 
} 
0

Great idea @slambeth

public List<String> getDirectoryListing(String urlPath)throws Exception 
     { 
      return getDirectoryListing(urlPath, new ArrayList<>()); 
     } 

     public List<String> getDirectoryListing(String urlPath, List<String> directoryListing)throws Exception 
     { 
      InitParams ip = new InitParams(); 
      Elements links; 

      try 
      { 
       Document doc = Jsoup.connect("http://" + urlPath).get(); 

       links = doc.select("body a"); 
       for (Element link : links) 
       { 
        if(link.text().lastIndexOf("/")>0) { 
         getDirectoryListing(urlPath + link.text(), directoryListing); 
        } 
        else 
         directoryListing.add(link.text()); 
       } 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 

      return directoryListing; 
     } 
Verwandte Themen