Avatar billede willi Nybegynder
22. november 2002 - 15:45 Der er 14 kommentarer og
1 løsning

file extension og directory

I FilenameFilter kan dir og ext listes v.h.a.
boolean accept(File dir, String name)
Så vidt jeg forstår skal dir erstattes med et directory navn.
Men hvordan skrives det?
Avatar billede carstenknudsen Nybegynder
22. november 2002 - 16:30 #1
Det er ikke noget du skal gøre, metoden bliver
kaldt med et File og et String argument, du
skal blot fortælle om filen skal inkluderes,
som f.eks.

boolean accept(File dir,String name) {
return name.endsWith(".java");
}
eller accepter alle java filer i hjemmedirektoriet
boolean accept(File dir,String name) {
return name.endsWith(".java") &&
      dir.equals(new File(System.getProperty("user.dir")));
}
Avatar billede willi Nybegynder
22. november 2002 - 19:32 #2
Jeg får så denne kompileringsfejl.

DirFilter.java:7: ';' expected
        boolean accept(File dir,String name)
                              ^
1 error
Avatar billede carstenknudsen Nybegynder
22. november 2002 - 19:46 #3
public boolean accept(File dir,String name) {
...
}
Avatar billede willi Nybegynder
22. november 2002 - 20:19 #4
Hvorfor giver den så en exeption?

java.lang.ArrayIndexOutOfBoundsException
    at DirFilter.main(DirFilter.java:15)
Exception in thread "main"

''''''''''''''


import java.io.*;

class DirFilter implements FilenameFilter

{ public boolean accept(File dir, String name)
    {    return name.endsWith(".java") &&
      dir.equals(new File(System.getProperty("user.dir")));
    }
       
public static void main(String[] args)
    { File dir = new File(args[0]);
        String[] files = dir.list(new DirFilter());
        System.out.println(files.length + "dir(s):");
        for(int i = 0; i < files.length; i++)
            System.out.println("\t" + files[i]);
    }
}
Avatar billede carstenknudsen Nybegynder
22. november 2002 - 20:40 #5
Hvad er files.length?
Avatar billede willi Nybegynder
22. november 2002 - 22:11 #6
Tja...
Oprigtigt ved jeg det ikke.
Min forventning er at den specificerer antallet af filer i dir.

Det er en kode jeg har taget fra Java programming Language Language SE.

Men faktisk har jeg arbejdet med en anden for længe siden har jeg fundet ud af:


import java.io.*;

public class DirOgFile
{
    public static void main(String[] args)
    {
            File dir = new File("f:\\");
            File[] files = dir.listFiles();
            for(int i=0; i<files.length; ++i)
        {
            File f = files[i];
            if(f.isDirectory())
            System.out.println("["+f.getName()+"]");
            else
            System.out.println( "  " + f.getName() );
        }           
    }
}


Den virker. Men hvad .length er ved jeg stadig ikke helt andet end hvad der er angivet i Java docs http://java.sun.com/j2se/1.4.1/docs/api/java/io/File.html#length().

Måske misforstår jeg det når jeg opfatter metoden som længden af filer
Avatar billede willi Nybegynder
22. november 2002 - 22:25 #7
(Hvis længden(antallet) af filer er større end 0 ?)
Avatar billede carstenknudsen Nybegynder
22. november 2002 - 22:36 #8
Jeg ved godt hvad .length det er, men hvad skriver den
ud i dit tilfælde?
Avatar billede willi Nybegynder
23. november 2002 - 11:06 #9
Om du ved det betyder mindre end at du stillede spørgsmålet.
Jeg har ikke gjort mig konkrete tanker om .length's funktion og rækkevidde.
Avatar billede carstenknudsen Nybegynder
24. november 2002 - 10:51 #10
Kan du ikke sige hvad din System.out.println skriver
på skærmen, det er bare det jeg har behov for at vide.
Avatar billede carstenknudsen Nybegynder
24. november 2002 - 12:50 #11
Jeg har afprøvet din kode og den virker fint.
Du skal huske at give navnet på et direktorie
på kommandolinien, og det skal være det samme
du det nuværende direktorie, ellers virker det ikke.
Hvis du vil have listet hvad der er i det nuværende direktorie
kan du droppe File dir = new File(args[0[) og i stedet skrive
File dir = new File(System.getProperty("user.dir"))
Hvis du skriver hvad du kunne tænke dig dir filter skal
gøre, vil jeg gerne skrive et eksempel som du kan se på.
Avatar billede carstenknudsen Nybegynder
24. november 2002 - 12:52 #12
Ang .length så er det længden af en array.
File[] files = new File[7];
int length = files.length; // length er lig med 7
Avatar billede willi Nybegynder
10. december 2002 - 12:25 #13
Hej Carsten.

Hvis jeg også skal have listet subDirectory kunne jeg vel bruge et "if" statement.

//hvis(f.isDirectory og f.isDirectory() ikke er tomt) skal søge efter subDirectory

...og så fortsætte løkken på en måde gennem biblioteks hierarkiet.
Men det er ikke bare sådan.


import java.io.*;

public class DirOgFile
{
public static void main(String[] args)
           
{File dir = new File("l:\\test");
File[] files = dir.listFiles();
           
for(int i=0; i<files.length; ++i)
        {
File f = files[i];
if(f.isDirectory())
System.out.println("["+f.getName()+"]");
}
//løkken skal fortsætte til der ikke er flere subDirectory
}
}

/*
Noget i denne stil. tænkte jeg

for(int i=0; i<files.length; ++i)
{    {
File f = files[i];
if(f.isDirectory())
System.out.println("["+f.getName()+"]");
for(int j=0; i<files.length; ++j)
{    //hvis(f.isDirectory og f.isDirectory() ikke er tomt) skal søge efter subDirectory

if(!f == null)
System.out.println("  ["+f.getName()+"]"); //skal udskrive subdirectory
else //skal hoppe ud af løkken of finde næste overordnede directory
}
}    }   
           
*/
Avatar billede carstenknudsen Nybegynder
10. december 2002 - 12:36 #14
Du kan stadig bruge dit filter, lettere
modificeret:
class DirFilter implements FilenameFilter

{ public boolean accept(File dir, String name)
    {   
if (dir.isDirectory()) return true;
return name.endsWith(".java") &&
      dir.equals(new File(System.getProperty("user.dir")));
    }
Det du laver ovenfor kommer ikke til at virke uden
rekursion.
Avatar billede willi Nybegynder
17. december 2002 - 00:25 #15
Tak for hjælpen
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