Как да зададете програмно разрешения за 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);

Но когато проверявам разрешенията на тези файлове във File Explorer, той ми показва "--- rwx r-x".

И така, как мога да задам разрешенията на 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 е вашият обект Файл.

Не трябва да използвате FileUtils с отражение, за да зададете разрешения за файл. Можете просто да използвате помощните методи на класа Файл. С File можете също да извикате: setReadable(), setWritable() и setExecutable()

person w3bshark    schedule 07.09.2016