Avatar billede martinhrj Nybegynder
18. juli 2002 - 10:05 Der er 9 kommentarer og
2 løsninger

Søgning efter fil

Er det muligt i java at søge efter en fil på harddisken. F.eks. hvis man vil finde winword.exe, for at køre filen...
Avatar billede disky Nybegynder
18. juli 2002 - 10:35 #1
Ja det kan man sagtens du scanner bare harddisken rekursivt.

kig på java.io.* der er mange metoder som kan bruges.

f.eks. en der giver et array af strings retur med filnavne i et dir, og en der kan bruges for at se om en fil er et dir.
Med dem scanner du bare alt, indtil du finder din fil,
Avatar billede martinhrj Nybegynder
18. juli 2002 - 10:36 #2
Jeg takker indtil videre...
Avatar billede martinhrj Nybegynder
18. juli 2002 - 10:50 #3
Hvordan kan det være at når jeg kører følgende programstump, får jeg kun 2 filer ud af det? En .java-fil og en .class-fil. Og der ligger meget mere på mit c-drev!

import java.io.*;

public class FileFinder
{
    public static void main(String[] args)
    {
        File f = new File("c:\\");
        String[] s = f.list();

        for(int i=0; i<s.length; i++)
        {
            File f1 = new File(s[i]);
            if(f1.isFile())
                System.out.println(s[i]);
        }
    }
}

Og hvis jeg istedet spørger f1.isDirectory(), får jeg intet!
Avatar billede disky Nybegynder
18. juli 2002 - 11:20 #4
hvor mange filer ligger der i roden af dit c:\ drev ?
Avatar billede martinhrj Nybegynder
18. juli 2002 - 11:23 #5
26 filer og 43 biblioteker...
Avatar billede cs_henrik Nybegynder
18. juli 2002 - 11:26 #6
Brug File.listFiles() i stedet for Files.list(). Så får et array af File i stedet for et array af String.

F.eks.:

import java.io.*;

public class FileFinder
{
    public static void main(String[] args)
    {
        File f = new File("<somedir>");
        File[] f1 = f.listFiles();

        for(int i=0; i<f1.length; i++)
        {
            if(f1[i].isFile())
                System.out.println(f1[i]);
    }
    }
}

Men hvorfor ikke bruge rekursion, som disky foreslår?

Mvh. Henrik
Avatar billede martinhrj Nybegynder
18. juli 2002 - 11:42 #7
Tak... det virker! Men jeg vil jo også gerne se hvilke biblioteker der er på computeren... ellers kan jeg jo ikke bruge rekursiv søgning!?! Eller hvad?
Avatar billede disky Nybegynder
18. juli 2002 - 11:48 #8
jeg har en komplet løsning klar om 2 min
Avatar billede disky Nybegynder
18. juli 2002 - 11:50 #9
Her er den :-)

import java.io.*;

public class FileFinder
{
    boolean done=false;
    private void scanDir(File path,String find)
    {
        if(done) return;
        File[] filer = path.listFiles();
        for(int i=0; i<filer.length; i++)
        {
            if(filer[i].isFile() && filer[i].getName().equalsIgnoreCase(find))
            {
                System.out.println("Filen '"+find+"' fundet i '"+filer[i].getAbsolutePath());
                done=true;
                return;
            }
            if(filer[i].isDirectory())
            {
                scanDir(filer[i],find);
            }
        }
    }

    public FileFinder()
    {
        File f = new File("c:\\");
        scanDir(f,"winword.exe");
    }
   
    public static void main(String[] args)
    {
        new FileFinder();
    }
}


Den udskriver komplet sti til den fundne fil med navnet du beder om.
Avatar billede martinhrj Nybegynder
18. juli 2002 - 11:57 #10
Jeg takker! Jeg havde lige brygget noget sammen der lignede faktisk på en prik! Der er lidt point til begge.
Avatar billede disky Nybegynder
18. juli 2002 - 12:01 #11
Selv tak
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