Avatar billede haunted Nybegynder
01. september 2009 - 10:55 Der er 4 kommentarer og
1 løsning

Filbrowser i java

Hej.

Jeg sidder og skal læse en biblioteksstruktur ind i java men bliver lidt i tvivl hvordan jeg skal gemme den.

Hvad er mest optimalt, et hashmap? Andre ideer?

Det skal ikke bare være en lang liste. Men en struktur hvor man kan se i hvilke foldere, filerne hører til.

På forhånd tak for ideer og hjælp. :)
Avatar billede superanden Nybegynder
01. september 2009 - 13:24 #1
Jeg ville bruge et treemap.
Avatar billede arne_v Ekspert
02. september 2009 - 02:22 #2
Mit forslag:

public class Entry
{
    private String name;
    private List<Entry> sub;
    // constructor + getters og setters
}
Avatar billede haunted Nybegynder
02. september 2009 - 09:04 #3
superanden: jeg overvejede et eller andet spidsfindigt med treemap. Men måske Arne_v's forslag giver bedre mening. Hvis jeg altså har forstået det rigtigt.

Jeg forsøger lige og vender tilbage.
Avatar billede haunted Nybegynder
02. september 2009 - 14:05 #4
Så fik jeg prøvet det og det ser ud til at virke. nedenunder er koden som jeg afprøvede.

Arne_v hvis du ligger et svar så får du pointene.

Tak for hjælpen til begge.

---

public class Entry {
  private String name;
  private boolean folder;
  private List<Entry> subDirectory;
   
  public Entry(){
  }
   
  public Entry(boolean folder, String name, List<Entry> subDirectory){
    this.folder = folder;
    this.name = name;
    this.subDirectory = subDirectory;
  }
   
  // getter & setter
  ....
}

-----------------

private Entry getDirectoryStructure() {
  File directory = new File("c:\\testfolder");

  List<Entry> result = new ArrayList<Entry>();
  File[] filesAndDirs = directory.listFiles();
  List<File> filesDirs = Arrays.asList(filesAndDirs);

  for(File file : filesDirs) {
    Entry Entry = null;
   
    if (file.isDirectory()) {
      List<Entry> deeperList = getSubDirectory(file);

      Entry = new Entry(true, file.getName(), deeperList);
    } else {
      Entry = new Entry(false, file.getName(), null);       
    }
           
    result.add(Entry);
  }
       
  Entry rootEntry = new Entry(true, directory.getName(), result);
       
  return rootEntry;
}   

private List<Entry> getSubDirectory(File directory) {
  List<Entry> result = new ArrayList<Entry>();
       
  File[] filesAndDirs = directory.listFiles();
  List<File> filesDirs = Arrays.asList(filesAndDirs);

  for(File file : filesDirs) {
    Entry Entry = null;
           
    if (file.isDirectory()) {
      List<Entry> deeperList = getSubDirectory(file);

      result.addAll(deeperList);

      Entry = new Entry(true, file.getName(), deeperList);
    } else {
      Entry = new Entry(false, file.getName(), null);     
    }
           
    result.add(Entry);
  }

  return result;
}
Avatar billede arne_v Ekspert
02. september 2009 - 15:11 #5
svar
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