我在unix机器上运行java 7应用程序。有没有办法在纯java中获取当前的umask值?
在C中,我会使用umask
系统调用的组合,但我不认为我可以在不使用JNI的情况下在Java中调用它。还有另一种方法吗?
编辑:这是一个C示例(来自GUN libc文档):
mode_t
read_umask (void)
{
mode_t mask = umask (0);
umask (mask);
return mask;
}
答案 0 :(得分:2)
一个简单的解决方案,如果没有类/方法来获取umask,为什么不在调用java之前获取它并作为属性传递?
答案 1 :(得分:1)
您可以使用NIO(使用的代码来自javadocs)来获取某些文件属性,或者您可以执行shell命令,因为使用Runtime.execute
创建的进程会继承其创建者的umask过程
所以你应该能够在不使用JNI的情况下解决问题。
package test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFileAttributeView;
import java.nio.file.attribute.PosixFileAttributes;
import java.nio.file.attribute.PosixFilePermissions;
public class Test {
private static final String COMMAND = "/bin/bash -c umask -S";
public static String getUmask() {
final Runtime runtime = Runtime.getRuntime();
Process process = null;
try {
process = runtime.exec(COMMAND);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String umask = reader.readLine();
if (process.waitFor() == 0)
return umask;
} catch (final IOException e) {
e.printStackTrace();
} catch (final InterruptedException e) {
e.printStackTrace();
Thread.currentThread().interrupt();
}
return "";
}
public static void main(String[] args) throws IOException {
/*
* NIO
*/
PosixFileAttributes attrs = Files.getFileAttributeView(Paths.get("testFile"), PosixFileAttributeView.class)
.readAttributes();
System.out.format("%s %s%n", attrs.owner().getName(), PosixFilePermissions.toString(attrs.permissions()));
/*
* execute shell command to get umask of current process
*/
System.out.println(getUmask());
}
}