Avatar billede avnes Nybegynder
22. maj 2003 - 12:08 Der er 5 kommentarer og
1 løsning

Problemer med java.io.FilenameFilter

Hej

Jeg forsøger at lære lidt om java.io, og ser lige nu på FilenameFilter som jeg skal bruge til at vise nogle filer i et directory. Jeg har fundet dette eksempel på Internet:

---SuffixFilter.java---
import java.io.File;
import java.io.FilenameFilter;

public class SuffixFilter implements FilenameFilter {

  private static String suffix;

  public SuffixFilter(String suffix)
  {
    this.suffix = "." + suffix;
  }
 
  public boolean accept(File dir, String name) {
    return name.endsWith(this.suffix);
  }
}
-----------------------

Så har jeg lavet en lille test som skal vise nogle filer i tre directories:

---Test.java---
import java.io.*;

public class Test
{
  public Test()
  {
  }

  public static void main(String[] args)
  {
    String pathBase = "/media";
    SuffixFilter sfRA = new SuffixFilter("ra");
    SuffixFilter sfMP3 = new SuffixFilter("mp3");
    File RemaFile = new File(pathBase + "/rema/mp3");
    String[] RemaFilenames = RemaFile.list(sfMP3);
    File RemaUncutFile = new File(pathBase + "/rema/real");
    String[] RemaUncutFilenames = RemaUncutFile.list(sfRA);
    File JimiFile = new File(pathBase + "/jimi");
    String[] JimiFilenames = JimiFile.list(sfMP3);
    for (int i=0; i < RemaFilenames.length; i++) {
      System.out.println(RemaFilenames[i] + "<br>");
    }
    for (int i=0; i < RemaUncutFilenames.length; i++) {
      System.out.println(RemaUncutFilenames[i] + "<br>");
    }
    for (int i=0; i < JimiFilenames.length; i++) {
      System.out.println(JimiFilenames[i] + "<br>");
    }
    System.out.println(RemaFilenames.length);
    System.out.println(RemaUncutFilenames.length);
    System.out.println(JimiFilenames.length);
  }
}
---------------

Problemet er at RemaUncutFilenames.length bliver 0, så mine *.ra filer vises ikke. Det er bare det SuffixFilter  jeg laver sist som bliver aktivt. Så min suffix static i "SuffixFilter.java" bliver overskrevet. Plz help.
Avatar billede arne_v Ekspert
22. maj 2003 - 12:11 #1
Erstat:

private String suffix;

med:

private static String suffix;
Avatar billede arne_v Ekspert
22. maj 2003 - 12:11 #2
Omvendt naturligvis - erstat:

private static String suffix;

med:

private String suffix;
Avatar billede arne_v Ekspert
22. maj 2003 - 12:12 #3
static betyder kun en variabel delt mellem alle instanser => at
konstruktorerne overskriver den.
Avatar billede disky Nybegynder
22. maj 2003 - 12:18 #4
Du skal rette:
---SuffixFilter.java---
import java.io.File;
import java.io.FilenameFilter;

public class SuffixFilter implements FilenameFilter {

  private static String suffix;

  public SuffixFilter(String suffix)
  {
    this.suffix = "." + suffix;
  }
 
  public boolean accept(File dir, String name) {
    return name.endsWith(this.suffix);
  }
}


til

---SuffixFilter.java---
import java.io.File;
import java.io.FilenameFilter;

public class SuffixFilter implements FilenameFilter {

  private String suffix;

  public SuffixFilter(String suffix)
  {
    this.suffix = "." + suffix;
  }
 
  public boolean accept(File dir, String name) {
    return name.endsWith(this.suffix);
  }
}


Dit problem er at den suffix variable findes på klasse niveau (static) og ikke på objekt niveau, det vil sige den sidte setting af den er gældne for alle objekter.
Avatar billede avnes Nybegynder
22. maj 2003 - 12:20 #5
Tak til jer begge, men Arne var hurtigst, så han får mine 100 points.
Avatar billede disky Nybegynder
22. maj 2003 - 12:27 #6
fair nok, jeg kunne bare ikke se arbes svar da jeg postede, men jeg kunne selvfølgelig bare havde reloadet siden.
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