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 字符。
添加回答
举报