Можете уточнить? Вы хотите прочитать umask приложения (текущий Java-процесс)? Или вы хотите прочитать значение umask некоторых файлов в файловой системе?
Вы можете использовать NIO (используемый код из javadocs), чтобы получить некоторые атрибуты файла, или вы можете выполнить команду оболочки, поскольку процесс, созданный с помощью 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());
}
}
Java - это независимый от платформы язык, поэтому что такое umask на окнах? – StarPinkER
Посмотрите на пакет [java.nio.file.attribute] (http://docs.oracle.com/javase/7/docs/api/java/nio/file/attribute/package-summary.html). – McDowell
@StarPinkER В java 7 nio вы найдете множество необязательных операций, которые реализованы только на определенных платформах (например, 'PosixFileAttribute'). – paradigmatic