Avatar billede cvpcvp Nybegynder
21. april 2005 - 14:23 Der er 8 kommentarer og
1 løsning

Find file + path

Er det muligt at lede efter en fil i et bibliotek ved hjælp af Java?
Jeg har en fil:
test.txt
Den ligger et eller andet sted i en eller anden undermappe under f.eks. c:\files\

Jeg vil gerne lave noget java kode der finder placeringen af filen så det er muligt for mig finde den sti filen ligger under.
f.eks. c:\files\myfiles\file\test.txt

Hvordan gør jeg det?
Avatar billede arne_v Ekspert
21. april 2005 - 14:28 #1
Der er kun "the hard way".

Du kalder en rekursiv metode med c:\files\ og lader den checke
alle filer og kalde sig selv med alle subdirs.
Avatar billede cvpcvp Nybegynder
21. april 2005 - 14:29 #2
hvordan gør jeg det?
Avatar billede arne_v Ekspert
21. april 2005 - 14:30 #3
Jeg har følgende kode på lager:

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 arne_v Ekspert
21. april 2005 - 14:31 #4
Det laver en:
  dir /s

Du skal så ikke have det til at printe alle filer men derimod til at returnere
den fulde sti til et match.

Jeg kan godt rette den til hvis du vil.
Avatar billede cvpcvp Nybegynder
21. april 2005 - 14:32 #5
hvis du gider vil det da være fjong!!
Avatar billede arne_v Ekspert
21. april 2005 - 14:38 #6
import java.io.*;
import java.util.*;

public class Find {
  public static void main(String[] args) {
      ArrayList lst = new ArrayList();
      find("C:\\Code", "build.xml", lst);
      for(int i = 0; i < lst.size(); i++) {
          System.out.println(lst.get(i));
      }
  }
  public static void find(String s, String target, List retvals) {
      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];
        if(dirlist[i].equals(target)) {
            retvals.add(fnm);
        }
        if ((new File(fnm)).isDirectory()) {
            find(fnm, target, retvals);
        }
      }
  }
}
Avatar billede arne_v Ekspert
21. april 2005 - 14:39 #7
Jeg valgte at lave det med ArrayList så jeg kunne returnere flere matches.

På Windows burde man nok lave en ikke case sensitiv sammenligning på filnavne.
Avatar billede cvpcvp Nybegynder
21. april 2005 - 14:49 #8
Jeg siger mange tak for hjælpen... igen igen... :-)
Du er vores redningsmand....
Du kan lige ligge et svar...
Avatar billede arne_v Ekspert
21. april 2005 - 14:53 #9
ok
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