Avatar billede rasmuslh Nybegynder
05. marts 2005 - 12:34 Der er 19 kommentarer og
1 løsning

Hvordan får man en given fils type-extension?

hejsa

Jeg har et hurtigt spørgsmål som sikkert er nemt nok, men jeg har ikke kunnet finde det noget sted. Jeg vil gerne lave et program der læser et directory ind og så udvælger de filer fra directoriet der har en bestemt type extensions.

F.eks. en metode der tæller hvor mange .class files der er i et directory. Kan nogen hjælpe mig med det?

Desuden kunne jeg også godt tænke mig at videre hvordan man læser sub-directories ind i java.


På forhånd tak.
Rasmus
Avatar billede kalp Novice
05. marts 2005 - 12:35 #1
Måske klassen File ?
Avatar billede kalp Novice
05. marts 2005 - 12:36 #2
Der kan du i hvertfald få stien til en fil og med den extension
Avatar billede arne_v Ekspert
05. marts 2005 - 12:37 #3
1)

Brug klassen File metoden list med et FileNameFilter

2)

klassen File metoden mkdir
Avatar billede mikkelbm Nybegynder
05. marts 2005 - 12:37 #4
File file;

string ext = file.getName().subString (file.getName().lastIndexOf ("."));


(ikke testet)
Avatar billede rasmuslh Nybegynder
05. marts 2005 - 12:48 #5
Jeg kan godt se den sidste af mikkelbm, men er der ikke anden måde. Jeg troede måske der var en metode der returnede en file-extensionen.

@Arne - kunne du være mere specifik og så skrev jeg hvordan man læser et subdirectory ikke laver! ;D
Avatar billede arne_v Ekspert
05. marts 2005 - 12:50 #6
Du laver et File objekt med dit directory, du laver en klasse som implementerer
FileNameFilter, så laver du en instans af den klasse og kalder list metoden med den.
Avatar billede rasmuslh Nybegynder
05. marts 2005 - 12:50 #7
Får en cannot find method subString(int) med mikkelbm
Avatar billede arne_v Ekspert
05. marts 2005 - 12:52 #8
Sorry.

list returnerer et antal fil navne

dem laver du igen et File objekt udfra

og så kan du med isDirectory metoden teste om det er et dir

og så kan du kalde rekurivt

String subdir = dir + System.getProperty("file.separator") + filelist[i]
Avatar billede arne_v Ekspert
05. marts 2005 - 12:52 #9
substring - ikke med stort S
Avatar billede rasmuslh Nybegynder
05. marts 2005 - 12:55 #10
Hej arne

Kunne du uddyber lidt. jeg er ikke den hurtigste knallert på haven ud i java. jeg ahr følgende metode:

public int fileCounterSpecific(String type) {
        File tempFile;
        File file = new File(path);           
        File[] files = file.listFiles();
        int numberFiles = 0;
        for (int i = 0; i < files.length; i++) {
            tempFile = files[i];
            String ext = tempFile.getName().subString(tempFile.getName().lastIndexOf ("."));
            if (ext == type)
                numberFiles++;
        }
        return numberFiles;
    }
Avatar billede arne_v Ekspert
05. marts 2005 - 12:59 #11
Jeg laver lige et eksempel
Avatar billede rasmuslh Nybegynder
05. marts 2005 - 12:59 #12
Nu compiler den, men den virker ikke. Den siger bare at der er 0 files i det givne directory.

    public int fileCounterSpecific(String type) {
        File tempFile;
        File file = new File(path);           
        File[] files = file.listFiles();
        int numberFiles = 0;
        for (int i = 0; i < files.length; i++) {
            tempFile = files[i];
            String ext = tempFile.getName().substring(tempFile.getName().lastIndexOf ("."));
            if (ext == type)
                numberFiles++;
        }
        return numberFiles;
    }
Avatar billede arne_v Ekspert
05. marts 2005 - 13:05 #13
import java.io.*;

public class DirWithFilter {
    public static int countExtension(String dir, String ext) {
        File dirobj = new File(dir);
        String[] filelist = dirobj.list(new ExtensionCheck(ext));
        return filelist.length;
    }
    public static void main(String[] args) {
        System.out.println(countExtension("C:\\", ".java"));
        System.out.println(countExtension("C:\\", ".bat"));
    }
}

class ExtensionCheck implements FilenameFilter {
    private String ext;
    public ExtensionCheck(String ext) {
        this.ext = ext;
    }
    public boolean accept(File dir, String name) {
        if(name.length() < ext.length()) {
            return false;
        }
        return name.substring(name.length() - ext.length()).equals(ext);
    }
}
Avatar billede rasmuslh Nybegynder
05. marts 2005 - 13:13 #14
Det er lidt sofistikeret det der eksempel. Jeg prøver at få det implementeret det og siger mange tak for hjælpen.

Kan du evt. se hvorfor mit eksempel ikke virker. Nu er jeg blevet nysgerrig og skriv lige et svar så du kan få dine point.
Avatar billede arne_v Ekspert
05. marts 2005 - 13:16 #15
Prøv og erstat

if (ext == type)

med

if (ext.equals(type))
Avatar billede arne_v Ekspert
05. marts 2005 - 13:16 #16
svar
Avatar billede rasmuslh Nybegynder
05. marts 2005 - 13:18 #17
Det har jeg prøvet, men det virker ikke. Nå tak for hjælpen.
Avatar billede arne_v Ekspert
05. marts 2005 - 13:20 #18
Prøv lige og sæt en:

System.out.println(ext + " " + type);

ind så kan du se hvad der sker.

Mit gæt er at det er noget banalt såsom med eller uden punktum.
Avatar billede rasmuslh Nybegynder
05. marts 2005 - 13:37 #19
Dte er med punktum. Nu har jeg fået den til at virke tak for kampen. :D
Avatar billede arne_v Ekspert
05. marts 2005 - 18:34 #20
Min kode kan iøvrigt laves lidt fixere:

import java.io.*;

public class DirWithFilter {
    public static int countExtension(String dir, String ext) {
        File dirobj = new File(dir);
        String[] filelist = dirobj.list(new ExtensionCheck(ext));
        return filelist.length;
    }
    public static void main(String[] args) {
        System.out.println(countExtension("C:\\", ".java"));
        System.out.println(countExtension("C:\\", ".bat"));
    }
}

class ExtensionCheck implements FilenameFilter {
    private String ext;
    public ExtensionCheck(String ext) {
        this.ext = ext;
    }
    public boolean accept(File dir, String name) {
        return name.endsWith(ext);
    }
}
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