French Fichiers texte

klaus

Expert
Licensed User
Longtime User
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:
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
 
Top