listFile () файла не работает со ссылкой в ​​файле - PullRequest
0 голосов
/ 08 июня 2018

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() не работает?

Есть ли подход для решения этой проблемы?

1 Ответ

0 голосов
/ 09 июня 2018

Кажется, есть несколько причин, по которым listFiles вернул бы ноль, даже если он не является каталогом и не существует.

Глядя на свой код, он запрашивает SecurityManager, является лиПриложение имеет право на доступ к папке, и, поскольку мобильное приложение, как правило, весьма ограничено в отношении того, что они могут делать с телефоном (например, доступ или изменение личной информации, контактов и т. д.), не удивительно, если в этом проблема.

Это то, что мешает вашему коду работать здесь, я считаю, что вам нужно добавить любой необходимый код, чтобы приложение запрашивало у пользователя разрешение на доступ к этим ресурсам.

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