> Subject: rekurzivne prechadzanie zloziek
>
Ahoj, kdysi jsem to taky resil a tady je vysledek. Jsou tam i nejake (doufam ze 
uzitecne) metody na vic... :~) Treba jak si ulozit adresarovou strukturu do 
vlastni objektove struktury.

Výpis adresářů a souborů

1. Vypíše všechny adresáře a soubory v daném adresáři i s 
podadresáři(rekurzivně) a uloží je do pole typu Field.
      import java.io.File;
      public class Projdi {
        
        public static void main(String [] args) {
                Projdi p = new Projdi();
                File [] file = p.projdiAUloz(new File("C:\\"));
                p.vypis(file);
        }
        
        /**
         * vypis - vypise rekurzivne pole objektu
         */
        public void vypis(File [] file) {
                try {
                        for(int i = 0; i<file.length; i++) {
                                if(file[i].isDirectory()) {
                                        
System.out.println("<dir>"+file[i].getName());
                                        vypis(file[i].listFiles());
                                } else {
                                        
System.out.println("<file>"+file[i].getName());
                                }
                        }
                } catch (NullPointerException e) {
                        System.err.println("<Zrejme je zadana spatna adreasa: 
neni co vypisovat>");
                }
        }
        
        /**
         * projdi - projde rekurzivne adresare a vyvori pole File
         */
        public File [] projdiAUloz(File dir) {
                try {
                        File [] children = dir.listFiles();
                        for(int i = 0; i<children.length; i++) {
                                if(children[i].isDirectory()) {
                                        projdiAUloz(new File(dir, 
children[i].getName()));
                                }
                        }
                        return children;
                } catch (NullPointerException e) {
                        System.err.println("<Spatna cesta>");
                }
                return null;
        }
      }

   2. Další ukázka. Není použité pole, ale kolekce a parametrizované typy (je 
to vytržené z kontextu, takže možná trochu chaos, ale když to víc prozkoumáte 
příjdete na to):

      public void saveDirectory() {
              List<File> dir = projdiAUlozList(new 
File("E:\\school\\5.semestr\\DAIS\\testDir"));
              //vypisList(dir);
              IContentOfDataMedium content = contert(dir, new 
DataMediumDirectory("root"));
              //vypisConvert(content);
              contentDAO.saveContent(content);
              DataMedium datamedium = dmDAO.getDataMedium("medium 1");
              dmDAO.addContentOfDataMedium(content, datamedium);
          }

          public IContentOfDataMedium contert(List<File> dir, 
IContentOfDataMedium content) {
              try {
                  for(int i = 0; i<dir.size(); i++) {
                      if(dir.get(i).isDirectory()) {
                          
content.add(contert(Arrays.asList(dir.get(i).listFiles()), new 
DataMediumDirectory(dir.get(i).getName())));
                      } else {
                          content.add(new DataMediumFile(dir.get(i).getName()));
                      }
                  }
                  return content;
              } catch (NullPointerException e) {
                  System.err.println("<Spatna cesta>");
              }
              return null;
          }
          public void vypisConvert(IContentOfDataMedium file) {
              try {
                  for(int i = 0; i<file.size(); i++) {
                      if(file.get(i) instanceof DataMediumDirectory) {
                          System.out.println("<dir>"+file.get(i).getLabel());
                          vypisConvert(file.get(i));
                      } else {
                          System.out.println("<file>"+file.get(i).getLabel());
                          vypisConvert(file.get(i));
                      }
                  }
              } catch (NullPointerException e) {
                  System.err.println("<Zrejme je zadana spatna adreasa: neni co 
vypisovat>");
              }
          }
          public void vypisList(List<File> file) {
              try {
                  for(int i = 0; i<file.size(); i++) {
                      if(file.get(i).isDirectory()) {
                          System.out.println("<dir>"+file.get(i).getName());
                          vypisList(Arrays.asList(file.get(i).listFiles()));
                      } else {
                          System.out.println("<file>"+file.get(i).getName());
                      }
                  }
              } catch (NullPointerException e) {
                  System.err.println("<Zrejme je zadana spatna adreasa: neni co 
vypisovat>");
              }
          }
          public List<File> projdiAUlozList(File dir) {
              try {
                  List<File> children = Arrays.asList(dir.listFiles());
                  for(int i = 0; i<children.size(); i++) {
                      if(children.get(i).isDirectory()) {
                          projdiAUlozList(new File(dir, 
children.get(i).getName()));
                      }
                  }
                  return children;
              } catch (NullPointerException e) {
                  System.err.println("<Spatna cesta>");
              }
              return null;
          }
Tady ta posledni, je ulozeni adresarove struktury do dp composite. Kde 
IContentOfDataMedium je interface k adresarum a souborum, ktere je mozne mit 
ulozene na medii.
Mam to na webu.... je to takovy neustale nedodelany web... takze to brat s 
rezervou :) ale informace jsou tem docela uzitecne. Link: 
http://homel.vsb.cz/~kva056/programovani_v_java/programovani.html

Ondra.


> Ahoj vsetky,
>
> skusal som prechadzat rekruzivne zlozky podla nasledovneho kodu >
>
>     public void rekurzive(String path){
>         String pathToRootDir = path;
>         File walkDir = new File(pathToRootDir);
>         String [] listDirectory = walkDir.list();
>
>         for(int i=0; i < listDirectory.length; i++ ){
>             File f = new File(listDirectory[i]);
>             if(f.isFile()){
>                 String newPath = pathToRootDir+f.getPath();
>                 rekurzive(newPath);
>                 continue;
>             }
>             System.out.println("subor "+f.getName())
>
>
>
>         }
>   Bohuzial pri vstupe do druhej urovne sa zlozky neidentifikuju ako directory
> ..... z nejakeho dovodu mi napr. zlozku web vyhodnoti isDirectory() > true 
> ....
>
> viete ma niekto nakopnut spravnym smerom ?
>
> dik

Odpovedet emailem