2 回答

TA貢獻1862條經驗 獲得超6個贊
您可以通過如下簡單的轉換來做到這一點:
public class Chmod {
public Set<PosixFilePermission> fromInt(int perms) {
final char[] ds = Integer.toString(perms).toCharArray();
final char[] ss = {'-','-','-','-','-','-','-','-','-'};
for (int i = ds.length-1; i >= 0; i--) {
int n = ds[i] - '0';
if (i == ds.length-1) {
if ((n & 1) != 0) ss[8] = 'x';
if ((n & 2) != 0) ss[7] = 'w';
if ((n & 4) != 0) ss[6] = 'r';
}
else if (i == ds.length-2) {
if ((n & 1) != 0) ss[5] = 'x';
if ((n & 2) != 0) ss[4] = 'w';
if ((n & 4) != 0) ss[3] = 'r';
}
else if (i == ds.length-3) {
if ((n & 1) != 0) ss[2] = 'x';
if ((n & 2) != 0) ss[1] = 'w';
if ((n & 4) != 0) ss[0] = 'r';
}
}
String sperms = new String(ss);
System.out.printf("%d -> %s\n", perms, sperms);
return PosixFilePermissions.fromString(sperms);
}
public static void main(String[] args) throws Exception {
Chmod test = new Chmod();
test.fromInt(444);
test.fromInt(1);
test.fromInt(777);
test.fromInt(666);
test.fromInt(604);
test.fromInt(0);
}
}

TA貢獻1876條經驗 獲得超5個贊
引用維基百科,您只需弄清楚這些數字是如何產生的:
數字符號
另一種表示 Unix 權限的方法是八進制(base-8)表示法,如 stat -c %a 所示。該符號至少由三位數字組成。最右邊的三個數字中的每一個都代表權限的不同組成部分:所有者、組和其他。(如果存在第四位數字,則最左邊(高位)數字地址三個附加屬性,setuid 位、setgid 位和粘性位。)
這些數字中的每一個都是二進制數字系統中其組成位的總和。結果,特定位添加到總和中,因為它由數字表示:
讀取位的總數加 4(二進制 100),
寫入位的總數加 2(二進制 010),并且
執行位將其總數加 1(二進制 001)。
...結束報價
換句話說:您需要做一些二進制掩碼來計算表達該數字所需的 r、w、x 字符。
添加回答
舉報