> 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