Q:

Printing File list

I've got some problems trying to print the list of available directories.
Here's my code with comments:
File f = new File(System.getProperty("user.home"));
System.out.println(f.list().toString()); //the output here is absolutely incorrect

This is the output
[Ljava.lang.String;@1540e19d

A:

Your output, [Ljava.lang.String;@1540e19d, is the typical toString() output of any array of String. [ means array. Then you see the class name for String, then the array's hashcode.
You're getting an array of String. Iterate through that array in a for loop
for (String fileName : f.list()) {
    System.out.println(fileName);
}

or print it out with 
System.out.println(java.util.Arrays.toString(f.list()));

The key is to use the File API as it will tell you what the File#list() will return, here an array of String.

A:

To find directories, you need to filter the list. listFiles() is a better method to use as it returns a list of File objects rather than String, this is ultimately more powerful and allows things like testing if the "file" is a directory which I believe you're trying to do.
File home = new File(System.getProperty("user.home"));

for (File file : home.listFiles()) {
    if (file.isDirectory()) {
        System.out.println(file);
    }
}

Alternatively you can use a FileFilter in listFiles(), this will return a primitive array of File, which you can change to a List with Arrays.asList
List<File> directories = Arrays.asList(home.listFiles(new FileFilter() {

    @Override
    public boolean accept(File pathname) {
        return pathname.isDirectory();
    }
}));

Regarding the issue of the "incorrect" output [Ljava.lang.String;@1540e19d, this is normal for printing out primitive arrays, unlike Collection types which typically have a nice toString() implemention. You can use the utility method java.util.Arrays.toString to "pretty print" each element.
If you require a recursive listing I'd consider using the newer java.nio.Files.walk() functionality rather than writing your own recursive method.
List<Path> paths = Files.walk(home.toPath()).filter(new Predicate<Path>() {
            @Override
            public boolean test(Path path) {
                return path.toFile().isDirectory();
            }
        }).collect(Collectors.toList());

Or more concisely with Java 8 closures.
List<Path> paths = Files.walk(home.toPath()).filter((path) -> path.toFile().isDirectory()).collect(Collectors.toList());

