Maison Java javaDidacticiel Explication détaillée de la façon de lire et d'écrire des fichiers dans le répertoire des actifs sous Android

Explication détaillée de la façon de lire et d'écrire des fichiers dans le répertoire des actifs sous Android

Jan 17, 2017 pm 03:10 PM

Les fichiers de ressources Android peuvent être grossièrement divisés en deux types :

Le premier est le fichier de ressources compilable stocké dans le répertoire res :

Ce type de système de fichiers de ressources sera dans R. java L'ID du fichier de ressources est généré automatiquement, donc accéder à ce fichier de ressources est relativement simple, il suffit de passer R.XXX.ID

Le second est le fichier de ressources natif stocké dans le répertoire des actifs :

Étant donné que le système ne compile pas les fichiers de ressources sous les actifs lors de la compilation, nous ne pouvons pas y accéder via R.XXX.ID. Alors peut-on y accéder par le chemin absolu de la ressource ? Parce qu'une fois l'apk installé, il sera placé dans le répertoire /data/app/**.apk et existera sous la forme d'apk Asset/res et sera lié dans l'apk et ne sera pas décompressé dans /data/. data/YourApp, nous ne pouvons donc pas obtenir directement les chemins absolus vers les actifs car ils n'existent pas.

Heureusement, le système Android nous fournit une classe d'outils AssetManager.

En regardant l'API officielle, vous pouvez voir qu'AssetManager donne accès aux fichiers de ressources originaux de l'application ; cette classe fournit une API de bas niveau qui vous permet d'ouvrir, de lire et d'appliquer sous la forme d'un flux d'octets simple Les fichiers de ressources brutes que le programme regroupe.

En plus de fournir le répertoire /res pour stocker les fichiers de ressources, Android fournit également les fichiers de ressources à stocker dans le répertoire /assets. Les ID ne seront pas automatiquement générés dans R.java sous le répertoire /assets, donc. lisez le répertoire des ressources. Les fichiers de ressources doivent fournir des chemins, et nous pouvons accéder à ces fichiers via la classe AssetManager.
L'auteur doit copier les ressources de A.apk (ressource apk, mettre toutes les ressources telles que : so, apk, fichiers exécutables, etc. sous le répertoire des actifs, apk n'implémente pas de code logique) dans le répertoire spécifié, donc l'auteur crée A B.apk (un service, qui peut également être implémenté avec Activity) est créé pour implémenter la logique de copie de ressources, car le chemin de copie est généralement inaccessible ou créé (chaque apk ne peut accéder qu'à /data/data/propre nom de package. / après l'installation) Espace privé ci-dessous), si l'auteur a besoin de cet apk pour obtenir les autorisations système (Autorisations système), le shareduserid doit être déclaré dans AndroidManifest.xml. L'opération spécifique sera enregistrée dans la section suivante.


1. Plusieurs API couramment utilisées par AssetManager pour lire des fichiers

1. Méthode de lecture de fichier
AssetManager.open(String filename) renvoie un flux d'octets de type InputSteam, le nom du fichier ici doit être un fichier, pas un dossier. La méthode open d'AssetManager pour ouvrir les fichiers de ressources est une méthode surchargée. Vous pouvez ajouter un paramètre int de la méthode d'ouverture, et les opérations correspondantes peuvent être effectuées en fonction de différents paramètres. Pour plus de détails, veuillez consulter le document officiel http://web.mit.edu/clio/MacData/afs/sipb/project/android/docs/reference/android/content/res/AssetManager.html
2. Fichiers de ressources peut exister Dossiers et sous-répertoires
public final String[]list(String path), renvoie les noms de tous les fichiers et sous-répertoires du répertoire actuel. L'accès à tous les fichiers de ressources peut être obtenu en parcourant de manière récursive l'intégralité du répertoire de fichiers. String[] Tableau de chaînes, une pour chaque actif. Ces noms de fichiers sont relatifs au « chemin ». Vous pouvez ouvrir le fichier en concaténant « chemin » et un nom dans la chaîne renvoyée (via File) et en le transmettant à open(). .

2. Code d'implémentation pertinent
Ressource APK (A.apk)

Explication détaillée de la façon de lire et décrire des fichiers dans le répertoire des actifs sous Android

Extrait de code d'implémentation spécifique, en raison de l'utilisation des autorisations système, le chemin généré Vous pouvez modifier B.apk vous-même

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    try {
      ctxDealFile = this.createPackageContext("com.zlc.ipanel",
          Context.CONTEXT_IGNORE_SECURITY);
    } catch (NameNotFoundException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
    }
    
    btn3.setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        try {
          String uiFileName = "ipanelJoin";
          deepFile(ctxDealFile, uiFileName);
        } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          textView.setText("file is wrong");
        }
      }
    });
    //
  }
  public void deepFile(Context ctxDealFile, String path) {
    try {
      String str[] = ctxDealFile.getAssets().list(path);
      if (str.length > 0) {//如果是目录
        File file = new File("/data/" + path);
        file.mkdirs();
        for (String string : str) {
          path = path + "/" + string;
          System.out.println("zhoulc:\t" + path);
          // textView.setText(textView.getText()+"\t"+path+"\t");
          deepFile(ctxDealFile, path);
          path = path.substring(0, path.lastIndexOf('/'));
        }
      } else {//如果是文件
        InputStream is = ctxDealFile.getAssets().open(path);
        FileOutputStream fos = new FileOutputStream(new File("/data/"
            + path));
        byte[] buffer = new byte[1024];
        int count = 0;
        while (true) {
          count++;
          int len = is.read(buffer);
          if (len == -1) {
            break;
          }
          fos.write(buffer, 0, len);
        }
        is.close();
        fos.close();
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
Copier après la connexion

Pour des informations plus détaillées sur la façon de lire et d'écrire des fichiers dans le répertoire des actifs sous Android, veuillez faire attention au site Web PHP chinois pour les articles connexes !

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le logiciel de sécurité de l'entreprise entraîne-t-il l'exécution de l'application? Comment dépanner et le résoudre? Le logiciel de sécurité de l'entreprise entraîne-t-il l'exécution de l'application? Comment dépanner et le résoudre? Apr 19, 2025 pm 04:51 PM

Dépannage et solutions au logiciel de sécurité de l'entreprise qui fait que certaines applications ne fonctionnent pas correctement. De nombreuses entreprises déploieront des logiciels de sécurité afin d'assurer la sécurité des réseaux internes. ...

Comment obtenir élégamment des noms de variables de classe d'entité pour créer des conditions de requête de base de données? Comment obtenir élégamment des noms de variables de classe d'entité pour créer des conditions de requête de base de données? Apr 19, 2025 pm 11:42 PM

Lorsque vous utilisez MyBatis-Plus ou d'autres cadres ORM pour les opérations de base de données, il est souvent nécessaire de construire des conditions de requête en fonction du nom d'attribut de la classe d'entité. Si vous manuellement à chaque fois ...

Comment simplifier les problèmes de cartographie des champs dans l'amarrage du système à l'aide de mapstruct? Comment simplifier les problèmes de cartographie des champs dans l'amarrage du système à l'aide de mapstruct? Apr 19, 2025 pm 06:21 PM

Le traitement de la cartographie des champs dans l'amarrage du système rencontre souvent un problème difficile lors de l'exécution d'amarrage du système: comment cartographier efficacement les champs d'interface du système a ...

Comment Intellij Idea identifie-t-elle le numéro de port d'un projet de démarrage de printemps sans publier un journal? Comment Intellij Idea identifie-t-elle le numéro de port d'un projet de démarrage de printemps sans publier un journal? Apr 19, 2025 pm 11:45 PM

Commencez le printemps à l'aide de la version IntelliJideaultimate ...

Comment convertir les noms en nombres pour implémenter le tri et maintenir la cohérence en groupes? Comment convertir les noms en nombres pour implémenter le tri et maintenir la cohérence en groupes? Apr 19, 2025 pm 11:30 PM

Solutions pour convertir les noms en nombres pour implémenter le tri dans de nombreux scénarios d'applications, les utilisateurs peuvent avoir besoin de trier en groupe, en particulier en un ...

Comment convertir en toute sécurité les objets Java en tableaux? Comment convertir en toute sécurité les objets Java en tableaux? Apr 19, 2025 pm 11:33 PM

Conversion des objets et des tableaux Java: Discussion approfondie des risques et des méthodes correctes de la conversion de type de distribution De nombreux débutants Java rencontreront la conversion d'un objet en un tableau ...

Comment convertir les noms en nombres pour implémenter le tri au sein des groupes? Comment convertir les noms en nombres pour implémenter le tri au sein des groupes? Apr 19, 2025 pm 01:57 PM

Comment convertir les noms en nombres pour implémenter le tri au sein des groupes? Lors du tri des utilisateurs en groupes, il est souvent nécessaire de convertir le nom de l'utilisateur en numéros afin qu'il puisse être différent ...

Quelle est la différence entre les fuites de mémoire dans les programmes Java sur les processeurs ARM et architecture x86? Quelle est la différence entre les fuites de mémoire dans les programmes Java sur les processeurs ARM et architecture x86? Apr 19, 2025 pm 11:18 PM

Analyse du phénomène de fuite de mémoire des programmes Java sur différents processeurs d'architecture. Cet article discutera d'un cas où un programme Java présente différents comportements de mémoire sur les processeurs ARM et architecture x86 ...

See all articles