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. После этого отпустите его и сообщите нам, если это все еще проблема для вас, открыв новую ошибку, ссылаясь на этот для контекста.