12. februar 2005 - 12:22Der er
9 kommentarer og 1 løsning
Søge efter undermapper i en given path
Hej. Jeg er ved at lave et lille program der leder efter alle mp3 filer i en given sti, dvs den også søger i undermapper, og under-under mapper osv. Problemet er bare, at den algoritme jeg har lavet, giver nogle dubletter af mapper, så det ser ud som om jeg har flere filer end jeg rent faktisk har...
--------- code here: .........
import java.io.*; import java.util.*;
public class locate { File f; File[] files; filter filter = new filter();
public locate(File ff) { getFiles(ff); }
public void getFiles(File path) { File file; try { filter.listFiles(path); ArrayList a = getDirs(path); Iterator ita = a.iterator(); while(ita.hasNext()) { file = (File) ita.next(); //making a recursive call getFiles(file); } } catch(Exception e) { e.printStackTrace(); } }
public static void main(String[] args) { BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); System.out.print("Indtast dit Mp3 basedir: "); try { new locate(new File(in.readLine())); } catch (IOException e) { System.err.println(e); } } }
------------------------------------
metoden getDirs returnerer en ArrayList med de undermapper der er i en given sti. Klassen filter returnerer bare filerne i den mappe den sættes til at kigge i, så intet mærkeligt der. Det er i getFiles(File path) der skal ændres, da det er her det sner :)
public class DirSub2 { public static void main(String[] args) { Vector v = new Vector(); dir("C:\\java", v); for(int i = 0; i < v.size(); i++) { System.out.println((String)v.get(i)); } } public static void dir(String s, Vector v) { File dir = new File(s); String[] dirlist = dir.list(); for (int i = 0; i < dirlist.length; i++) { String fnm = dir + System.getProperty("file.separator") + dirlist[i]; v.add(fnm); if ((new File(fnm)).isDirectory()) { dir(fnm, v); } } } }
som løber gennem et directory træ.
[du bør kunne erstatte Vector med ArrayList uden videre]
hej...hvis i ser i toppen af min getFiles(File path) har jeg lavet en hovsa....
public void getFiles(File path) { File file; try { filter.listFiles(path); <-------- HER har jeg sat at den skal liste filer. Det skal jo ikke gøres her.... ArrayList a = getDirs(path); Iterator ita = a.iterator(); while(ita.hasNext()) { file = (File) ita.next(); //making a recursive call getFiles(file); } } catch(Exception e) { e.printStackTrace(); } }
Udover det lagde jeg filter.listFiles ned i while metoden og fjernede den fra getDirs metoden. Så virker det fint....
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.