ListFiles() файла, не работающего над символическими ссылками?

У меня есть следующий объект File, указывающий на каталог через символическую ссылку,

File directory = new File("/path/symlink/foo/bar");
String[] files = directory.listFiles();

listFiles() возвращает null, это из-за символической ссылки? если да, то как мне это сделать, если я действительно хочу перечислить файлы в баре, используя путь, содержащий символическую ссылку?

Ответ 1

В соответствии с тем, что я видел в то время, когда Google рассматривал это недоумение, Java требует, чтобы вы вызывали .getCanonicalFile() на File, путь которого содержит ссылку, прежде чем вы сможете использовать ее в других файлах.

Итак:

File directory = new File("/path/symlink/foo/bar").getCanonicalFile();
String[] files = directory.listFiles();

Ответ 2

Вы можете прочитать Символический LINK

Ответ 3

... расширяя то, что предложил @mickthompson, используя библиотеку файлов NIO (> Java 7), вы можете:

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 легко конвертируется в File поэтому весь ваш старый код Java IO можно безопасно хранить, @see Path#toFile().

Ответ 4

Это исправлено для выпуска 3.0.1. После этого отпустите его и сообщите нам, если это все еще проблема для вас, открыв новую ошибку, ссылаясь на этот для контекста.