


Explication détaillée de la façon de lire et d'écrire des fichiers dans le répertoire des actifs sous Android
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)
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(); } }
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 !

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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. ...

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 ...

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 ...

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

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 ...

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? 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 ...

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 ...
