El Viking Skrevet 8. februar 2007 Del Skrevet 8. februar 2007 Jeg må spørre igjen, jeg. Er ikke helt stø i dette her. Jeg vil gå igjennom alle undermapper i en gitt mappe, og prosessere alle filer under hver undermappe. Jeg har prøvd på følgende: public static void main(String[] args) { String mappe = "data"; //mappen som skal leses File dir = new File(mappe); String[] list = dir.list(); for (String t: list) { File inn = new File(t); System.out.println(mappe+t); //bare for å se at jeg har rett mappe og undermapper if(inn.isDirectory()) { processDir(mappe, t); } } } Men det ser ikke ut til å fungere. Er det også riktig måte å sende mappereferanser videre på? Målet er at metoden processDir skal kalles med referanse til mappe og undermappe, og så prosessere alle filer under undermappe. Jeg er helt java-fersk, og prøver ut ting på egenhånd her. Lenke til kommentar
Paull Skrevet 8. februar 2007 Del Skrevet 8. februar 2007 dir.list() fra J2SE API'en: "Returns an array of strings naming the files and directories in the directory denoted by this abstract pathname." Så, dersom du har en katalog "data\nils", så vil tilsvarende element i arrayet fra dir.list være "nils". Når du da oppretter et nytt File-objekt, og sender med strengen, så blir det tolket som "nils" i current-katalogen, istedet for "data\nils". Om du skifter ut File inn = new File(t); med File inn = new File(mappe,t); så burde det funke. (Tror jeg.. uten å ha testet det... ) Lenke til kommentar
krigun Skrevet 8. februar 2007 Del Skrevet 8. februar 2007 (endret) import java.io.File; public class Traverse { public Traverse() { } public void traverse(File dir) { for(File file : dir.listFiles()) { //File file = new File(dir.getAbsolutePath() + File.separator + fileName); System.out.println(file); if(file.isDirectory()) { traverse(file); } } } public static void main(String[] args) { Traverse t = new Traverse(); File file = new File("/home/monkey"); t.traverse(file); } } Endret 8. februar 2007 av krigun Lenke til kommentar
Patton Skrevet 8. februar 2007 Del Skrevet 8. februar 2007 Hvorfor bruke File.list() og deretter instansiere et File-objekt, når du kan få File objektene direkte med File.listFiles()? Lenke til kommentar
krigun Skrevet 8. februar 2007 Del Skrevet 8. februar 2007 Hvorfor bruke File.list() og deretter instansiere et File-objekt, når du kan få File objektene direkte med File.listFiles()? 7901038[/snapback] Ja, der ser du For mye kaffe på meg idag... Lenke til kommentar
Iyon Skrevet 8. februar 2007 Del Skrevet 8. februar 2007 Jeg personlig ville styrt unna rekursjon i Java, med en stor (les: dyp) katalogstruktur, risikerer du stack overflow. Jeg ville istedet gjort dette med en kø. I eksempelet under bruker jeg en først inn, først ut-kø, forkortet til FIFO på engelsk. Dette skulle tilsvare et bredde-først søk/traversering i treet. Du kan eventuelt bruke en LIFO kø, sist inn, sist ut, også kjent som en stack, eller tallerkenstabelmodellen. import java.io.File; import java.util.ArrayList; public class Traverser { public Traverser() { } public void traverse(File dir) { ArrayList<File> queue= new ArrayList<File>(); queue.add(dir); while (!queue.isEmpty()) { //traverserer katalog-køen dir = queue.get(0); // henter fremste katalog i køen for(File file : dir.listFiles()) { System.out.println(file); if(file.isDirectory()) queue.add(file); // legger til funnet mappe i katalog-køen } } } public static void main(String[] args) { Traverser t = new Traverser(); File file = new File("/home/monkey"); t.traverse(file); } } Lenke til kommentar
El Viking Skrevet 9. februar 2007 Forfatter Del Skrevet 9. februar 2007 (endret) import java.io.File; public class Traverse { public Traverse() { } public void traverse(File dir) { for(File file : dir.listFiles()) { //File file = new File(dir.getAbsolutePath() + File.separator + fileName); System.out.println(file); if(file.isDirectory()) { traverse(file); } } } public static void main(String[] args) { Traverse t = new Traverse(); File file = new File("/home/monkey"); t.traverse(file); } } Det funket!! Med litt modifikasjoner for å passe inn i min kode. Tusen takk! Brilliant. Endret 9. februar 2007 av El Viking Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå