Beaucoup d'applications nécessitent un accès à des données stockées de manière permanente. Les deux moyen de stockage les plus courants des fichiers et des bases de données.
Dans ce tutoriel nous traiterons les fichiers texte.
L'objet prédéfini Files (prédéfini veut dire qu'il n'est pas nécessaire de déclarer l'objet vous même) contient quelques fonctions (methods) utiles pour travailler avec des fichiers et qui sont simples à utiliser.
Emplacements pour stockage de fichiers (Files locations) - Il y a quelques endroits importants dans lesquels vous pouvez lire et écrire des fichiers.
File.DirAssets
Le dossier 'Assets' contient tous les fichiers qui ont été ajoutés avec le gestionnaire de fichiers (file manager) de l'IDE. Ces fichiers sont en lecture uniquement ! Vous ne pouvez pas créer de nouveaux fichiers dans ce dossier, qui fait partie intégrante du fichier apk de l'application.
File.DirInternal / File.DirInternalCache
Ces deux dossiers se trouvent dans la mémoire principale et sont 'privés' pour l'application et donc inaccessibles par d'autres applications.
Le dossier cache peut être effacé par le système si celui ci a besoin de plus de espace mémoire.
File.DirRootExternal
Le dossier racine de la carte de stockage externe.
File.DirDefaultExternal
Le dossier externe sur la carte de stockage de l'application .
Ce dossier est: <carte stockage>/Android/data/<package>/files/
Il sera crée si nécessaire.
Notez que les deux propriétés ci dessus ajoutent la permission EXTERNAL_STORAGE à votre application.
Conseil: Vous pouvez tester si une carte mémoire est présente et disponible au moyen de File.ExternalReadable et File.ExternalWritable.
L'objet prédéfini Files contient également quelques fonctions pour écrire et lire des fichiers.
Vous pouvez aussi utiliser les objets TextReader et TextWriter pour réaliser ces opérations manuellement.
Notez que TextReader et TextWriter ne sont pas limités à des fichiers seulement mais fonctionnent aussi avec d'autres flux.
TextReader et TextWriter ont un avantage sur les fonctions File read/write lorsqu'on travaille avec de grands fichiers. Les fonctions File lisent complètement le fichier et stockent le contenu en mémoire. C'est dans beaucoup de cas la solution la plus simple, néanmoins si vous travaillez avec de grands fichiers (plus que 1 à 2 Mbytes) il est préférable d'utiliser TextReader ou TextWriter.
File.WriteString - Ecrit le texte (string) dans un nouveau fichier.
File.ReadString - Lit un fichier et met le contenu dans une variable string.
File.WriteList - Ecrit toutes les valeurs mémorisées dans l'objet List dans un fichier. Toutes les valeurs sont converties en variables string. Chaque valeur est écrite dans sa propre ligne.
Attention: Si une valeur contient le caractère 'retour chariot' la valeur sera sauvée sur plusieures ligne, mais lors de la lecture ces lignes seront considérés comme plusiers éléments.
File.ReadList - Lit un fichier et ajoute chaque ligne comme élément dans un objet List.
File.WriteMap - Sauve le contenu d'un objet Map qui contient des élément constitués de paires, clé et valeur, dans un fichier texte. Le format du fichier est défini dans 'Java Properties file': .properties - Wikipedia, the free encyclopedia
Le format du fichier n'est en général pas important sauf si son contenu doit pouvoir être édité manuellemt. Ce format est facile à éditer manuellement.
Une des utilisation courantes de File.WriteMap consite à utiliser un objet Map pour mémoriser une liste de valeurs de "configuration" et de la sauver dans un fichier.
File.ReadMap - Lit un fichier et ajoute les paires clé/valeur comme éléments dans un objet Map. Notez que l'ordre des élément lors de la lecture n'est pas forcément le même celui que lors de l'écritue.
Exemple:
Dans ce tutoriel nous traiterons les fichiers texte.
L'objet prédéfini Files (prédéfini veut dire qu'il n'est pas nécessaire de déclarer l'objet vous même) contient quelques fonctions (methods) utiles pour travailler avec des fichiers et qui sont simples à utiliser.
Emplacements pour stockage de fichiers (Files locations) - Il y a quelques endroits importants dans lesquels vous pouvez lire et écrire des fichiers.
File.DirAssets
Le dossier 'Assets' contient tous les fichiers qui ont été ajoutés avec le gestionnaire de fichiers (file manager) de l'IDE. Ces fichiers sont en lecture uniquement ! Vous ne pouvez pas créer de nouveaux fichiers dans ce dossier, qui fait partie intégrante du fichier apk de l'application.
File.DirInternal / File.DirInternalCache
Ces deux dossiers se trouvent dans la mémoire principale et sont 'privés' pour l'application et donc inaccessibles par d'autres applications.
Le dossier cache peut être effacé par le système si celui ci a besoin de plus de espace mémoire.
File.DirRootExternal
Le dossier racine de la carte de stockage externe.
File.DirDefaultExternal
Le dossier externe sur la carte de stockage de l'application .
Ce dossier est: <carte stockage>/Android/data/<package>/files/
Il sera crée si nécessaire.
Notez que les deux propriétés ci dessus ajoutent la permission EXTERNAL_STORAGE à votre application.
Conseil: Vous pouvez tester si une carte mémoire est présente et disponible au moyen de File.ExternalReadable et File.ExternalWritable.
L'objet prédéfini Files contient également quelques fonctions pour écrire et lire des fichiers.
Vous pouvez aussi utiliser les objets TextReader et TextWriter pour réaliser ces opérations manuellement.
Notez que TextReader et TextWriter ne sont pas limités à des fichiers seulement mais fonctionnent aussi avec d'autres flux.
TextReader et TextWriter ont un avantage sur les fonctions File read/write lorsqu'on travaille avec de grands fichiers. Les fonctions File lisent complètement le fichier et stockent le contenu en mémoire. C'est dans beaucoup de cas la solution la plus simple, néanmoins si vous travaillez avec de grands fichiers (plus que 1 à 2 Mbytes) il est préférable d'utiliser TextReader ou TextWriter.
File.WriteString - Ecrit le texte (string) dans un nouveau fichier.
File.ReadString - Lit un fichier et met le contenu dans une variable string.
File.WriteList - Ecrit toutes les valeurs mémorisées dans l'objet List dans un fichier. Toutes les valeurs sont converties en variables string. Chaque valeur est écrite dans sa propre ligne.
Attention: Si une valeur contient le caractère 'retour chariot' la valeur sera sauvée sur plusieures ligne, mais lors de la lecture ces lignes seront considérés comme plusiers éléments.
File.ReadList - Lit un fichier et ajoute chaque ligne comme élément dans un objet List.
File.WriteMap - Sauve le contenu d'un objet Map qui contient des élément constitués de paires, clé et valeur, dans un fichier texte. Le format du fichier est défini dans 'Java Properties file': .properties - Wikipedia, the free encyclopedia
Le format du fichier n'est en général pas important sauf si son contenu doit pouvoir être édité manuellemt. Ce format est facile à éditer manuellement.
Une des utilisation courantes de File.WriteMap consite à utiliser un objet Map pour mémoriser une liste de valeurs de "configuration" et de la sauver dans un fichier.
File.ReadMap - Lit un fichier et ajoute les paires clé/valeur comme éléments dans un objet Map. Notez que l'ordre des élément lors de la lecture n'est pas forcément le même celui que lors de l'écritue.
Exemple:
B4X:
Sub Process_Globals
End Sub
Sub Globals
End Sub
Sub Activity_Create(FirstTime As Boolean)
If File.ExternalWritable = False Then
Msgbox("Cannot write on storage card.", "")
Return
End If
SaveStringExample
ReadStringExample
WriteListExample
ReadListExample
WriteMapExample
ReadMapExample
WriteTextWriter
ReadTextReader
End Sub
Sub SaveStringExample
File.WriteString(File.DirRootExternal, "String.txt", _
"This is some string" & CRLF & "and this is another one.")
End Sub
Sub ReadStringExample
Msgbox(File.ReadString(File.DirRootExternal, "String.txt"), "")
End Sub
Sub WriteListExample
Dim List1 As List
List1.Initialize
For i = 1 To 100
List1.Add(i)
Next
File.WriteList(File.DirRootExternal, "List.txt", List1)
End Sub
Sub ReadListExample
Dim List1 As List
'We are not initializing the list because it just holds the list that returns from File.ReadList
List1 = File.ReadList(File.DirRootExternal, "List.txt")
Msgbox("List1.Size = " & List1.Size & CRLF & "The third item is: " & List1.Get(2), "")
End Sub
Sub WriteMapExample
Dim Map1 As Map
Map1.Initialize
For i = 1 To 10
Map1.Put("Key" & i, "Value" & i)
Next
File.WriteMap(File.DirRootExternal, "Map.txt", Map1)
End Sub
Sub ReadMapExample
Dim Map1 As Map
'Again we are not initializing the map.
Map1 = File.ReadMap(File.DirRootExternal, "Map.txt")
'Append all entries to a string builder
Dim sb As StringBuilder
sb.Initialize
sb.Append("The map entries are:").Append(CRLF)
For i = 0 To Map1.Size - 1
sb.Append("Key = ").Append(Map1.GetKeyAt(i)).Append(", Value = ")
sb.Append(Map1.GetValueAt(i)).Append(CRLF)
Next
Msgbox(sb.ToString,"")
End Sub
Sub WriteTextWriter
Dim TextWriter1 As TextWriter
TextWriter1.Initialize(File.OpenOutput(File.DirRootExternal, "Text.txt", False))
For i = 1 To 10
TextWriter1.WriteLine("Line" & i)
Next
TextWriter1.Close
End Sub
Sub ReadTextReader
Dim TextReader1 As TextReader
TextReader1.Initialize(File.OpenInput(File.DirRootExternal, "Text.txt"))
Dim line As String
line = TextReader1.ReadLine
Do While line <> Null
Log(line) 'write the line to LogCat
line = TextReader1.ReadLine
Loop
TextReader1.Close
End Sub