Как установить права rw-r-r программно?

Я разрабатываю приложение, которое может восстанавливать данные приложений обратно в /data/data/{packageName}. После восстановления файлов ставлю права rw- r-- r--. Я устанавливаю таким образом:

public int chmod(File path, int mode) throws Exception {
    Class fileUtils = Class.forName("android.os.FileUtils");
    Method setPermissions = fileUtils.getMethod("setPermissions",
            String.class, int.class, int.class, int.class);
    return (Integer) setPermissions.invoke(null, path.getAbsolutePath(),
            mode, -1, -1);
}

и звоню chmod(file, 644);

Но когда я проверяю права доступа к этим файлам в проводнике, он показывает мне «--- rwx rx».

Итак, как я могу установить разрешения для rw- r-- r--?


person Rajkiran    schedule 28.01.2013    source источник
comment
Я думаю, вам нужен доступ суперпользователя, чтобы сделать это   -  person Blackbelt    schedule 28.01.2013
comment
да. У меня уже есть доступ к SU. Строка cmd = cp -r + sourceFile.getAbsolutePath() + /* + destinationFile.getAbsolutePath() + /; Runtime.getRuntime().exec (новая строка [] {su, cmd}); chmod (файл назначения, 644);   -  person Rajkiran    schedule 28.01.2013
comment
@Rajkiran Я также хочу изменить разрешение файла, и во время поиска я пришел к вашему вопросу. Я попробовал тот же код, но не смог найти класс FileUtils в пакете android.os. Как вы его использовали?? Пожалуйста, ответьте здесь.   -  person Amit Anand    schedule 20.08.2014
comment
Что вы действительно искали? В пакете android.os есть файл с таким именем. Исходный код: grepcode.com/file/repository.grepcode.com/java/ext/   -  person Rajkiran    schedule 20.08.2014


Ответы (2)


Значение неверное, правильное — 420 (десятичное 420 — восьмеричное 644). В качестве альтернативы вы можете добавить начальный 0, чтобы сделать его восьмеричным литералом Java. то есть

chmod(destinationFile, 0644)
person bwt    schedule 28.01.2013
comment
Ох, спасибо. Но, как вы можете видеть в моем втором комментарии, я использую команды для копирования файлов в режиме SU. Так что я пойду с @android_test для ответа. В любом случае, проголосовал. :) - person Rajkiran; 28.01.2013

Вы должны иметь возможность установить эти разрешения (rw- r-- r--) для файла, используя:

path.setReadOnly(true); //Sets all permissions for every owner back to read-only
path.setWritable(true); //Sets the owner's permissions to writeable

где path — ваш объект File.

Вам не нужно использовать FileUtils с отражением, чтобы установить разрешения для файла. Вы можете просто использовать вспомогательные методы класса File. С помощью File вы также можете вызвать: setReadable(), setWritable() и setExecutable()

person w3bshark    schedule 07.09.2016