listFiles() wyrzuca mi null

0

Witam,
Mam pewien dziwny problem. A mianowicie, mam fragment kodu w którym ma zostać wyświetlona zawartość pulpitów wszystkich użytkowników. Wygląda to tak:

File usersDir = new File("C:\\Users");
ArrayList<File> users = new ArrayList<>(4); //tablica przechowująca katalogi użytkowników
users.addAll(Arrays.asList(usersDir.listFiles()));
for (File user : users)
{
  ArrayList<File> userFiles = new ArrayList<>(20); //to tablica przechowująca wszystkie pliki z katalogu C:\Users
  ArrayList<File> userDirs = new ArrayList<>(20);  //to tablica przechowująca wszystkie katalogi z katalogu C:\Users
  userFiles.addAll(Arrays.asList(user.listFiles()));   //tu dodajemy pliki do pierwszej tablicy
  for (File f : userFiles)                                     
  {
    if (f.isDirectory())
      {
        userDirs.add(f);  //a tu wybieramy tylko katalogi i dodajemy do drugiej tablicy
      }
  }
  for (File d : userDirs)
  {
    if ("Pulpit".equals(d.getName()) || "Desktop".equals(d.getName()))// tu sprawdzamy czy w katalogu
								//użytkownika jest katalog "Desktop" lub "Pulpit"
    {
      ArrayList<File> desktop = new ArrayList<>(50);//to tablica do plików na pulpicie
      desktop.addAll(Arrays.asList(d.listFiles()));//a tu mam problem. Opis za kodem.
      for (File f : desktop)
      {
        System.out.println(f.getName());
      }
    }
  }
}

Przy próbie umieszczenia wszystkich plików z pulpitu w liście tablicowej metoda Arrays.asList() wyrzuca mi NullPointerException, bo d.listFiles jest null. Okazało się że ta metoda wcale nie bierze pod uwagę MOJEGO katalogu "Desktop" tylko katalogu C:\Users\Default\Desktop. U mnie jest tylko jeden użytkownik, MainUser. Okazuje się, że tablica users zawiera tylko jeden element, C:\Users\Default. Tak jakby mojego katalogu w ogóle nie widziała. Co to może być?

0
  1. Program będzie znacznie bardziej uniwersalny (np. zadziała na XP) jeżeli zmienisz początek na taki:
String dir = System.getProperty("user.home");
int lastSlash = dir.lastIndexOf(File.separator);
dir = dir.substring(0,lastSlash);
File usersDir = new File(dir);
  1. W Windows 7 katalog "C:\Users" zawiera również plik (desktop.ini), musisz go wykluczyć:
for (File user : users)
{
   if(user.isDirectory())
  1. W Windows 7 niektóre niby katalogi nie są katalogami, są linkami do katalogów, metoda listFiles() zwraca wtedy null, też trzeba je wykluczyć.
for (File user : users)
{
  String s = user.getAbsolutePath();
  if(!user.getAbsolutePath().contains("Default User") && user.isDirectory())

(To nie są wszystkie konieczne wykluczenia).

1 użytkowników online, w tym zalogowanych: 0, gości: 1