2017-05-24 5 views
-2

J'ai gardé certains fichiers binaires dans le répertoire brut dans l'application Android. Je veux y accéder dans l'application et en créer un fichier à l'exécution. Je vais envoyer ce fichier sur le réseau.Obtenir des fichiers à partir du dossier brut dans Android

Comment puis-je référencer les ressources brutes? J'ai fait le code suivant

private File getFileByResourceId(int id, String fileName) throws IOException { 
     File file = new File(fileName); 
     InputStream ins = ctx.openRawResource(id); 
     log.debug(ins.toString()); 
     log.debug(file.getAbsolutePath()); 
     ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
     int size = 0; 
     // Read the entire resource into a local byte buffer. 
     byte[] buffer = new byte[1024]; 
     while ((size = ins.read(buffer, 0, 1024)) >= 0) { 
      outputStream.write(buffer, 0, size); 
     } 
     ins.close(); 
     buffer = outputStream.toByteArray(); 
     FileOutputStream fos = new FileOutputStream(file); 
     fos.write(buffer); 
     fos.close(); 
     return file;} 

Mais quand j'essaye d'accéder à ce dossier il me donne des permissions.

Quelqu'un peut-il proposer une solution?

+0

Veuillez également noter que le code est dans une classe distincte où il n'y a pas de contexte d'Android. –

Répondre

0

Vous avez ajouté ce permision dans Manifestfile

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

vous utilisez os Marshmallow alors vous devez ajouter l'autorisation d'exécution

public boolean isStoragePermissionGranted() { 
    if (Build.VERSION.SDK_INT >= 23) { 
     if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) 
       == PackageManager.PERMISSION_GRANTED) { 
      Log.v(TAG, "Permission is granted"); 
      return true; 
     } else { 

      Log.v(TAG, "Permission is revoked"); 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
      return false; 
     } 
    } else { //permission is automatically granted on sdk<23 upon installation 
     Log.v(TAG, "Permission is granted"); 
     return true; 
    } 
} 
+0

Les permissions existent déjà dans le manifeste. –

+0

@ShivAnand dans votre appareil Marshmallow OS alors vous devez ajouter l'autorisation d'exécution. –

0

pour obtenir l'ID de ressource avec

getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION", 
         "raw", getPackageName()); 

Pour l'obtenir en tant que InputStream

InputStream ins = getResources().openRawResource(
     getResources().getIdentifier("FILENAME_WITHOUT_EXTENSION", 
     "raw", getPackageName())); 
+0

et ne pas oublier de faire une autorisation dans le manifeste. –

+0

J'ai toutes les autorisations pour lire/écrire sur le stockage externe dans le manifeste. Aussi comment puis-je vérifier que si les fichiers bruts sont réellement construits avec l'application? Et ce FILENAME_WITHOUT_EXTENSION est le nom de fichier de ressource brut correct? –

+0

Fichier avec nom .. –