listFiles () файла не работает с символическими ссылками? - PullRequest
10 голосов
/ 18 марта 2010

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

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

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

Ответы [ 4 ]

16 голосов
/ 18 марта 2010

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

Итак:

File directory = new File("/path/symlink/foo/bar").getCanonicalFile();
String[] files = directory.listFiles();
3 голосов
/ 18 марта 2010

Вы можете прочитать символическую ССЫЛКУ

2 голосов
/ 26 октября 2016

.. расширяя то, что предложил @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 можно безопасно хранить, @ см. Path#toFile().

0 голосов
/ 16 декабря 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...