> 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