Avatar billede r9 Nybegynder
24. marts 2003 - 16:19 Der er 10 kommentarer og
2 løsninger

Find filer i et Directory

Jeg har brug for en metode som kan finde ALLE filer i et Directory. Den skal fungere rekursivt.

Jeg har lavet denne:

    public String[] ListFiles(String dir) {
        Vector v = new Vector();

        File [] filList;
        File f = new File(dir);
        filList = f.listFiles();

        for (int i = 0; i < filList.length; i++) {
            if (filList[i].isDirectory()) {
                ListFiles(filList[i].toString());
            }
            if (filList[i].isFile()) {
                v.add(filList[i].getAbsolutePath());
                System.out.println(filList[i]);
            }
        }

        v.trimToSize();
        String [] res = new String[v.size()];
        v.copyInto(res);

        return res;
    }

Men er den 100% sikker?
Avatar billede r9 Nybegynder
24. marts 2003 - 16:21 #1
rettelse:

Jeg skal kun bruge filnavnet, ikke filen (getAbsolutePath)
Avatar billede disky Nybegynder
24. marts 2003 - 16:25 #2
Få denne her:

            if (filList[i].isDirectory()) {
                ListFiles(filList[i].toString());
            }

Til at kalde metoden igen, altså rekursivt og ret din getAbsolutpath
Avatar billede magoo20000 Nybegynder
24. marts 2003 - 16:27 #3
import java.io.*;

public class Dir {
    public static void main(String[] args) {
        // list all files in C:\
        File dir = new File("C:\\");
        String[] dirlist = dir.list();
        for(int i = 0; i < dirlist.length; i++) {
            System.out.println(dirlist[i]);
        }
     
        System.out.println((new File("C:\\z.z")).delete());
    }
}
Avatar billede r9 Nybegynder
24. marts 2003 - 16:28 #4
disky:

jamen det gør den jo allerede, altså kalder "ListFiles()"
Avatar billede disky Nybegynder
24. marts 2003 - 16:29 #5
hvad er dit problem så ?
Avatar billede r9 Nybegynder
24. marts 2003 - 16:31 #6
jeg vil bare vide om den er 100% ok.

umiddelbart så vil min metode vel kun virke hvis Java's listFiles() altid lister alle filer først, og dernæst alle Directory's
Avatar billede disky Nybegynder
24. marts 2003 - 16:36 #7
Den ser okay ud, foran din sidste if ville jeg smide en else ind.

Men ellers er det helt okay, rækkefølgen er også ligegyldigt af filer og directories.
Avatar billede arne_v Ekspert
24. marts 2003 - 16:38 #8
import java.io.*;

public class DirSub {
    public static void main(String[] args) {
        dir("C:\\java");
    }
    public static void dir(String s) {
        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];
            System.out.println(fnm);
            if ((new File(fnm)).isDirectory()) {
                dir(fnm);
            }
        }
    }
}
Avatar billede r9 Nybegynder
24. marts 2003 - 16:41 #9
arne:

er System.getProperty("file.separator") nødvendig?
Avatar billede arne_v Ekspert
24. marts 2003 - 16:41 #10
Ovenstående skriver alle filnavne ud.

Hvis du vil have dem i en Vector så laver du:

import java.io.*;
import java.util.*;

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);
            }
        }
    }
}
Avatar billede arne_v Ekspert
24. marts 2003 - 16:44 #11
Jeg appender en / eller \ ind mellem parent dir og filnavn -
System.getProperty("file.separator") gør at den samme kode virker på
både Windows og Unix/Linux.

Bemærk, at min kode er lidt anderledes end dit approach, da jeg lister
navne. Du lister filer og bruger så absolute path.

Jeg ved ikke hvad der er bedst. Jeg lavede det bare som jeg lige
kunen finde ud af det.
Avatar billede r9 Nybegynder
24. marts 2003 - 16:46 #12
takker
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester