Reputation: 3640
I have the following File object pointing to a directory via symbolic link,
File directory = new File("/path/symlink/foo/bar");
String[] files = directory.listFiles();
listFiles() returns null, is this because of the symlink? if yes, how will I go about this if I really want to list the files in bar using the path that contains a symlink?
Upvotes: 12
Views: 10645
Reputation: 4495
..extending what @mickthompson suggested, using the NIO File library (> Java 7) you can:
Path link = Paths.get("/path/symlink/foo/bar");
while (Files.isSymbolicLink(link)) {
link = Files.readSymbolicLink(link);
}
Path[] files = Files.list(link).toArray(size -> new Path[size]);
Path
is easily converted to File
so all your old Java IO code can be safely kept, @see Path#toFile()
.
Upvotes: 2
Reputation: 2523
This is fixed for the 3.0.1 release. After that's released, give it a try and let us know if it's still a problem for you by opening a new bug, linking back to this one for context.
Upvotes: 0
Reputation: 88796
According to what I've seen while Googling this puzzling behavior, Java requires that you call .getCanonicalFile()
on a File
whose path contains a link before you can use it in other file operations.
So:
File directory = new File("/path/symlink/foo/bar").getCanonicalFile();
String[] files = directory.listFiles();
Upvotes: 20