Cómo obtener el modo de permiso de archivo mediante programación en Java

Sé que es posible cambiar el modo de permiso de un archivo usando:

Runtime.getRuntime().exec( "chmod 777 myfile" ); .

Este ejemplo establece los bits de permiso en 777 . ¿Es posible establecer los bits de permiso a 777 mediante programación utilizando Java? ¿Se puede hacer esto a cada archivo?

Uso de chmod en Android

Java no tiene soporte nativo para operaciones dependientes de la plataforma como chmod. Sin embargo, Android proporciona utilidades para algunas de estas operaciones a través de android.os.FileUtils. La clase FileUtils no forma parte del SDK público y, por lo tanto, no es compatible. Por lo tanto, utilizar esto en su propio riesgo:

 public int chmod(File path, int mode) throws Exception { Class fileUtils = Class.forName("android.os.FileUtils"); Method setPermissions = fileUtils.getMethod("setPermissions", String.class, int.class, int.class, int.class); return (Integer) setPermissions.invoke(null, path.getAbsolutePath(), mode, -1, -1); } ... chmod("/foo/bar/baz", 0755); ... 

Referencia: http://www.damonkohler.com/2010/05/using-chmod-in-android.html?showComment=1341900716400#c4186506545056003185

Android hace que sea difícil interactuar con otras aplicaciones y sus datos excepto a través de Intents. Los intentos no funcionarán para los permisos porque dependen de la aplicación que recibe la Intención de hacer / proporcionar lo que desea; Probablemente no fueron diseñados para decirle a nadie los permisos de sus archivos. Hay maneras a su alrededor, pero sólo cuando las aplicaciones se deseen para operar en la misma JVM. Así que cada aplicación sólo puede cambiar su archivo. Para obtener más detalles en el permiso de archivo, consulte http://docs.oracle.com/javase/1.4.2/docs/guide/security/permissions.html

Como se comentó anteriormente, android.os.FileUtils ha cambiado y la solución publicada por Ashraf ya no funciona. El siguiente método debería funcionar en todas las versiones de Android (aunque utiliza reflexión y si un fabricante realiza cambios importantes esto puede no funcionar).

 public static void chmod(String path, int mode) throws Exception { Class<?> libcore = Class.forName("libcore.io.Libcore"); Field field = libcore.getDeclaredField("os"); if (!field.isAccessible()) { field.setAccessible(true); } Object os = field.get(field); Method chmod = os.getClass().getMethod("chmod", String.class, int.class); chmod.invoke(os, path, mode); } 

Obviamente, tendrá que poseer el archivo para realizar cualquier cambio de permiso.

Aquí está una solución usando Apache Commons.IO FileUtils , y los métodos apropiados en objetos File .

 for (File f : FileUtils.listFilesAndDirs(new File('/some/path'), TrueFileFilter.TRUE, TrueFileFilter.TRUE)) { if (!f.setReadable(true, false)) { throw new IOException(String.format("Failed to setReadable for all on %s", f)); } if (!f.setWritable(true, false)) { throw new IOException(String.format("Failed to setWritable for all on %s", f)); } if (!f.setExecutable(true, false)) { throw new IOException(String.format("Failed to setExecutable for all on %s", f)); } } 

Este es el equivalente de chmod -R 0777 /some/path . Ajuste las llamadas set{Read,Writ,Execut}able para implementar otros modos. (Actualizaré felizmente esta respuesta si alguien publica el código apropiado para hacer esto.)

  • Pantalla negra cuando se abre la aplicación
  • ¿No se puede hacer referencia a PNG descriptable en Java?
  • Finalización de la asignación de actividad de la interfaz de usuario
  • Realm y Comportamiento de incremento automático (Android)
  • Android: Dialog Builder multipleselection arreglo matriz
  • ¿Cómo funciona finish () en el evento OnClick?
  • El descubrimiento de servicio falló la excepción utilizando Bluetooth en Android
  • ¿Cómo terminar un observable?
  • TEXTVIEW sustanciación ubicación
  • Cómo cargar baldosas de un mapa de bits grande en Android?
  • Intentando agregar un método openFile a React Native, no se puede llamar a getCurrentActivity
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.