write studio read permission create code are and java android android-permissions

java - studio - storage permission s are required



java.io.FileNotFoundException:/storage/emulated/0/New file.txt: error al abrir: EACCES(Permiso denegado) (2)

He estado intentando cifrar archivos y volver a escribirlos en el mismo lugar. Pero recibí el mensaje de error que dice "java.io.FileNotFoundException: /storage/emulated/0/New file.txt: open failed: EACCES (Permission denied)". error al "java.io.FileNotFoundException: /storage/emulated/0/New file.txt: open failed: EACCES (Permission denied)".

Mi archivo de Manifest es este

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.tdk.mytestapplication2"> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:allowBackup="true"

Creo que he proporcionado permiso correcto allí. Y el código que estoy usando para cifrar archivos es este.

public static void encrypt(SecretKey secretKey, String filePath){ try { // Here you read the cleartext. FileInputStream fis = new FileInputStream(filePath); // This stream write the encrypted text. This stream will be wrapped by another stream. FileOutputStream fos = new FileOutputStream(filePath); // Create cipher Cipher cipher = Cipher.getInstance("AES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey); // Wrap the output stream CipherOutputStream cos = new CipherOutputStream(fos, cipher); // Write bytes int b; byte[] d = new byte[8]; while ((b = fis.read(d)) != -1) { cos.write(d, 0, b); } // Flush and close streams. cos.flush(); cos.close(); fis.close(); }catch(IOException e){ e.printStackTrace(); }catch (NoSuchAlgorithmException e){ e.printStackTrace(); }catch(NoSuchPaddingException e){ e.printStackTrace(); }catch(InvalidKeyException e){ e.printStackTrace(); } }

Y utilicé este método dentro de un botón.

Button btnEncrypt = (Button) findViewById(R.id.btnEnc); btnEncrypt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { aesKey = EncAndDec.generateKey(); String filePath = editText.getText().toString(); //Generating the file hash String md5Hash = MD5Hash.getMD5(filePath); System.out.println(aesKey.toString()); System.out.println(filePath); System.out.println(md5Hash); //Encrypting the file for(int i=1; i<100; i++) { EncAndDec.encrypt(aesKey, filePath); } } });

Todavía no pude configurar este error. Por favor, alguien ayude!


Implemente permisos de ejecución para ejecutar su aplicación en Android 6.0 Marshmallow (API 23) o posterior.

o puede habilitar manualmente el permiso de almacenamiento-

Ir a configuración> aplicaciones> "nombre_de_tu_app"> haga clic en él> luego haga clic en permisos> luego habilite el almacenamiento. Eso es.

Pero sugiero ir por el primero, que es Implementar permisos de tiempo de ejecución en su código.


Sospecho que está ejecutando Android 6.0 Marshmallow (API 23) o posterior. Si este es el caso, debe implementar permisos de tiempo de ejecución antes de intentar leer / escribir almacenamiento externo.