File
, из которого я пытаюсь создать массив Files[] currentDir
через File.listFiles()
, состоит из одного подкаталога, который является ссылкой (см. Ссылку на изображение ниже).
В Activityгде я пытаюсь создать currentDir
, я пытаюсь потом вычислить его длину, но я получаю NullpointerException: Attempt to get length of null array
.
соответствующий код:
File directory = new File("/storage/self")
currentDir = directory.listFiles();
...
for(File mFile:currentDir){...}
Вот ссылка на мое изображение: AVD File Explorer.
Используя отладчик, я обнаружил, что currentDir
остался пустым (нулевым), действительно.
MyЯ предполагаю, что это потому, что каталог primary
на самом деле является ссылкой.
Я нашел следующую ветку и попытался реализовать предложения: Аналогичный вопрос по SOF.
Я пытался:
File directory = directory.getCanonicalFile();
String[] files = directory.listFiles();
и пытался:
...
String mPath = null;
try {
mPath = directory.getCanonicalPath();
} catch (IOException e) {
e.printStackTrace();
}
File[] currentDir = null;
Path dirPath = Paths.get(mPath);
if (Files.isSymbolicLink(dirPath)) {
Path[] files = null;
try {
dirPath = Files.readSymbolicLink(dirPath);
files = Files.list(dirPath).toArray(size -> new Path[size]);
currentDir = new File[files.length];
for(int i = 0; i <files.length; i++){
currentDir[i] = files[i].toFile();
}
} catch (IOException e) {
e.printStackTrace();
}
}
else{
currentDir = directory.listFiles();
}
...
for(File mFile:currentDir){...}
(Честно говоря, мне не нравится этот подход, поэтому мой вопрос не сосредоточен на том, какраспознать ссылку.)
Операция никогда не входит в оператор if if (Files.isSymbolicLink(dirPath)) {...}
, возможно потому, что сам directory
не является ссылкой, поэтому он бесполезен, нос другой стороны, как мне получить этот подкаталог, если listFiles()
не работает?
Есть ли подход для решения этой проблемы?