El método java.io.File.setWritable() le permite configurar un archivo para que todos puedan escribir en sistemas de archivos que admitan esto de una manera independiente de la plataforma.
https://docs.oracle.com/javase/7/docs/api/java/io/File.html#setWritable(booleano,%20booleano)
¿Qué permite el comportamiento equivalente en el objeto java.nio.file.Path ?
El método estático java.nio.file.Files.setAttribute() implica que es posible establecer permisos,
Pero no hay un conjunto claro de parámetros que emule el método java.io.File.setWritable() .
NIO amplía el IO de Java pero no es un reemplazo completo de las clases existentes. La clase java.io.File tampoco está en desuso. Para java.io.File.setWritable() no hay equivalente dentro de java.nio.file.Files . Como ya se mencionó en una respuesta anterior, aún puede convertir el objeto Path en un objeto File y llamar a setWritable .
NIO introduce la noción de vistas de atributos de archivos y permite acceder, por ejemplo, también a Listas de control de acceso (ACL) y atributos de archivos definidos por el usuario. Por ejemplo, en Windows, setWritable solo tiene efecto en el indicador de solo lectura (primera pestaña dentro del explorador de archivos) pero no tiene efecto en las ACL (consulte la pestaña de seguridad en el explorador de archivos). Incluso cuando llama a file.setWritable(false) , el propietario aún tendrá permisos para escribir, pero finalmente no podrá escribir debido al indicador de solo lectura establecido.
Dado que no todos los sistemas operativos son compatibles con POSIX (saludos a Redmond;-), no todas las vistas de atributos de archivo están disponibles en todos los sistemas operativos. El siguiente código haría más o menos lo mismo que java.io.File.setWritable :
public static boolean setWriteable(Path path, boolean writeable) { try { PosixFileAttributeView posix = Files.getFileAttributeView(path, PosixFileAttributeView.class); if (posix != null) { // POSIX Set<PosixFilePermission> permissions = new HashSet<>(posix.readAttributes().permissions()); boolean changed = false; if (writeable) { changed = permissions.add(PosixFilePermission.OWNER_WRITE); } else { changed = permissions.remove(PosixFilePermission.OWNER_WRITE); } if (changed) { posix.setPermissions(permissions); } return true; } else { // Windows - does not support POSIX file permission view DosFileAttributeView dos = Files.getFileAttributeView(path, DosFileAttributeView.class); if (dos != null) { dos.setReadOnly(!writeable); } return true; } } catch (IOException e) { return false; } } Entonces, si solo desea cambiar el indicador de solo lectura de un archivo, me quedaría con File.setWritable . Es simple y no tiene que preocuparse por el sistema operativo / vistas de atributos de archivo compatibles. Si necesita más (por ejemplo, cambiar el propietario/grupo de un archivo o leer/cambiar ACL), las vistas de atributos de archivo deben ser su elección.
Use 'setWritable' en el objeto de archivo asociado de la ruta:
import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class Permissions { public static void main(String[] args) throws Exception { Path current = Paths.get("."); Path path = Files.createFile(current.resolve("permissions.txt")); path.toFile().setWritable(true, false); } }