- Presentación.
        Mediante la librería Dialogs, podemos elegir archivos, colores, día, hora, número... 
        El tutorial de la librería Dialogs lo encontramos en:
            http://www.basic4ppc.com/android/help/dialogs.html  
        El tutorial de la utilización de archivos y directorios lo encontramos en:
            http://www.basic4ppc.com/android/help/files.html 
        NOTA: Échale un vistazo al final de página donde hay aclaraciones con DirRoorExternal y resumen de trabajo con carpetas y archivos. 
        _______________________
  1.- Librería Dialogs. 
        Conociendo esta librería podemos elegir la Subrutina que necesitamos: elección de archivo, de colores, de números, de fecha... 
        ____________________________
              - Designer. Layout. 
        
          
            | Designer - Layout 
 | 
          
            |   
   El Botón Get File es que se utilizará para elegir un archivo, los demás botones se utilizan para elegir color, fecha, hora,...
 |   Creamos mediante el Designer un layout con 10 Button.
 Le llamamos Layout.
 A los Button le damos de nombre:  btnDate btnInput
 btnTime
 btnColor
 btnColor2
 btnColor3
 btnNumber
 btnFile
 btnCustom1
 btnCustom2
   Cargamos la librería: Dialogs   
 | 
        
        ____________________________
              - Código (copia y pega).
        
          
            | Código del Basic4Android 
 | 
          
            | 
 'Activity module
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
End Sub
Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.
Dim btnDate As Button
Dim btnInput As Button
Dim getTime As Button
Dim Bmp As Bitmap
Dim btnColor As Button
Dim btnColor2 As Button
Dim btnNumber As Button
Dim btnFile As Button
Dim btnCustom As Button
Dim lbl1 As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout")
Bmp.Initialize(File.DirAssets, "android48.png")
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub btnInput_Click
Dim Id As InputDialog
'Id.PasswordMode = True
'Id.InputType = Id.INPUT_TYPE_DECIMAL_NUMBERS
'Id.InputType = Id.INPUT_TYPE_NUMBERS
'Id.InputType = Id.INPUT_TYPE_PHONE
Id.Input = ""
Id.Hint = "Enter some text!"
Id.HintColor = Colors.ARGB(196, 255, 140, 0)
ret = DialogResponse.CANCEL
ret = Id.Show("Input the required text", "B4A Input Dialog", "Yes", "No", "Maybe", Bmp)
ToastMessageShow(ret & " : " & Id.Input, False) 
End Sub
Sub btnDate_Click
Dim Dd As DateDialog
Dd.Year = DateTime.GetYear(DateTime.Now)
Dd.Month = DateTime.GetMonth(DateTime.Now) 
Dd.DayOfMonth = DateTime.GetDayOfMonth(DateTime.Now)
ret = Dd.Show("Set the required date", "B4A Date Dialog", "Yes", "No", "Maybe", Bmp)
ToastMessageShow(ret & " : " & Dd.DayOfMonth & "/" & Dd.Month & "/" & Dd.Year , False)
End Sub
Sub btnTime_Click
Dim td As TimeDialog
Dim txt As String
Td.Hour = DateTime.GetHour(DateTime.Now)
Td.Minute = DateTime.GetMinute(DateTime.Now)
Td.Is24Hours = True
ret = Td.Show("Set the required time", "B4A Time Dialog", "Yes", "No", "Maybe", Bmp)
ToastMessageShow(ret & " : " & Td.Hour & ":" & Td.Minute, False)
End Sub
Sub btnColor_Click
Dim cd As ColorDialog
Dim color As Int
cd.RGB = Colors.RGB(128, 128, 128)
ret = cd.Show("B4A Color Dialog", "Yes", "No", "Maybe", Bmp) 
ToastMessageShow(ret & " : " & cd.Red & " " & cd.Green & " " & cd.Blue, False)
Activity.Color = cd.RGB
End Sub
Sub btnColor2_Click
Dim cd As ColorPickerDialog
Dim color As Int
cd.RGB = Colors.DarkGray
ret = cd.Show("B4A ColorPicker Dialog", "Yes", "No", "Maybe", Bmp) 
ToastMessageShow(ret & " : " & cd.RGB, False)
Activity.Color = cd.RGB
End Sub
Sub btnColor3_Click
Dim cd As ColorDialogHSV
Dim color As Int
cd.Hue = 180
cd.Saturation = 0.5
cd.Value = 0.5
ret = cd.Show("B4A ColorPicker Dialog HSV", "Yes", "No", "Maybe", Bmp) 
ToastMessageShow(ret & " : " & cd.RGB, False)
Activity.Color = cd.RGB
End Sub
Sub btnNumber_Click
Dim nd As NumberDialog
nd.Digits = 10
nd.Number = -12345
nd.Decimal = 2
nd.ShowSign = True
ret = nd.Show("B4A Number Dialog", "Yes", "No", "Maybe", Bmp) 
ToastMessageShow(ret & " : " & nd.Number, False) 
End Sub
Sub btnFile_Click
Dim fd As FileDialog
fd.FastScroll = True
fd.FilePath = File.DirRootExternal ' also sets ChosenName to an emtpy string
'fd.FilePath = File.DirInternal
'fd.ShowOnlyFolders = true
'fd.FileFilter = ".txt" ' for example or ".jpg,.png" for multiple file types
ret = fd.Show("B4A File Dialog", "Yes", "No", "Maybe", Bmp) 
ToastMessageShow(ret & " : Path : " & fd.FilePath & CRLF & "File : " & fd.ChosenName, False) 
End Sub
Sub btnCustom_Click
Dim cd As CustomDialog
Dim pnl As Panel
pnl.Initialize("pnl")
Dim bgnd As ColorDrawable
bgnd.Initialize(Colors.Green, 5dip)
pnl.Background = bgnd
Dim btn1 As Button
btn1.Initialize("btn1")
btn1.Text = "Press me"
pnl.AddView(btn1, 80dip, 50dip, 60dip, 60dip)
lbl1.Initialize("")
pnl.AddView(lbl1, 50dip, 120dip, 120dip, 60dip)
cd.AddView(pnl, 5%x, 0%y, 77%x, 70%y) ' sizing relative to the screen size is probably best
ret = cd.Show("B4A Custom Dialog", "Yes", "No", "Maybe", Bmp) 
End Sub
Sub btnCustom2_Click
Dim cd As CustomDialog2
Dim pnl As Panel
pnl.Initialize("pnl")
Dim bgnd As ColorDrawable
bgnd.Initialize(Colors.Cyan, 5dip)
pnl.Background = bgnd
Dim btn1 As Button
btn1.Initialize("btn1")
btn1.Text = "Press me"
pnl.AddView(btn1, 80dip, 50dip, 60dip, 60dip)
lbl1.Initialize("")
pnl.AddView(lbl1, 50dip, 120dip, 120dip, 60dip)
cd.AddView(pnl, 77%x, 60%y) ' sizing relative to the screen size is probably best
ret = cd.Show("B4A Custom Dialog", "Yes", "No", "Maybe", Bmp) 
End Sub
Sub btn1_Click
lbl1.Text = "Pressed!"
lbl1.Color = Colors.Black
ToastMessageShow("Pressed!", False) 
End Sub | 
        
        _______________________
        2.- Elegir directorio y archivo.
        
          
            | Basado en el código anterior vamos a crear un programa para elegir un directorio y un archivo. ____________________________- Designer. Layout.
 - Habilitamos la librería Dialogs, como lo hicimos en el proyecto anterior.  - Creamos un Botón y dos Label mediante código.  - El directorio File.DirRootExternal es la tarjeta de memoria SD Card - La tarjeta está "montada" en /mnt/sdcard - Si desde el principio quisieramos posicionarnos en el directorio Android que está en la tarjeta, deberíamos poner: fd.FilePath = File.Combine(File.DirRootExternal, "/Android/")  - Si quisieramos obtener la dirección absoluta pondríamos: Label1.Text = "Todo = " & fd.FilePath & "/" & fd.ChosenName  NOTA: si no funciona con el DirRootExternal, cámbialo por el DirAssets.  |  | 
        
        ____________________________
              - Código (copia y pega).
        
          
            | Código del Basic4Android 
 | 
          
            | 
' Juan Antonio Villalpando
' juana1991@yahoo.com
Sub Process_Globals
End Sub
Sub Globals
    Dim boton As Button
    Dim Label1, Label2 As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
      ' Crea Botón
       boton.Initialize("boton")
       Activity.AddView(boton, 5, 50, 260, 55) ' Posicion, ancho y alto
       boton.Text = "Pulsa para elegir archivos"
       
       ' Crea etiqueta Ruta
       Label1.Initialize("Label1")
       Label1.TextColor = Colors.Red
       Label1.Text = "Ruta = "
       Activity.AddView(Label1, 5, 150, 400, 90) ' Posicion, ancho y alto
       
        ' Crea etiqueta Archivo
        Label2.Initialize("Label2")
        Label2.TextColor = Colors.Red
        Label2.Text = "Archivo = "
        Activity.AddView(Label2, 5, 250, 400, 30) ' Posicion, ancho y alto       
                    
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub boton_Click
    Dim fd As FileDialog
    fd.FastScroll = True
    fd.FilePath = File.DirRootExternal ' Para ir a la raiz del SD Card
    ' fd.FilePath = File.Combine(File.DirRootExternal, "/Android/") ' Para ir a esa carpeta del SD Card
    ' fd.FileFilter = ".pdf" ' Para filtrar pdf
    ret = fd.Show("Elige archivo", "Sí", "No", "Tal vez", Null)    
    Label1.Text = "Ruta = " & fd.FilePath
    Label2.Text = "Archivo = " & fd.ChosenName
End Sub | 
        
        _______________________
        3.- Elegir archivos
                (no hace falta librería Dialogs) 
        
          
            |   Mediante el siguiente código podemos ver un listado de archivos que se encuentran en /mnt/sdcard, este directorio se refiere a la tarjeta de memoria SD, que en el código se llama mediante DirRootExternal. Para realizar este proyecto vamos al Designer y ubicamos: Label1, y un ListView1. Luego guardamos el Designer llamándolo Layout.
 Con este código no es necesario añadir ninguna librería.  - Mediante estas líneas podemos ver a la ruta de cada Directorio  ' Msgbox(File.DirRootExternal, "")
 ' Msgbox(File.DirAssets, "")
 ' Msgbox(File.DirInternal, "")
 ' Msgbox(File.DirDefaultExternal, "")
   |  | 
        
        
        
          
            | Código del Basic4Android 
 | 
          
            | 
Sub Process_Globals
    ' Juan Antonio Villalpando
    ' juana1991@yahoo.com
End Sub
Sub Globals
    Dim ListView1 As ListView
    Dim Label1 As Label
    Dim ruta, archivo As String
    Dim Listado As List
End Sub
Sub Activity_Create(FirstTime As Boolean)
    Listado.Initialize
    Activity.LoadLayout("Layout")
'    Habilita las siguientes líneas para ver la ruta de los distintos directorios    
'    Msgbox(File.DirRootExternal, "")
'    Msgbox(File.DirAssets, "")
'    Msgbox(File.DirInternal, "")
'    Msgbox(File.DirDefaultExternal, "")
    ListFolderContent("/")
    ' ListFolderContent(File.DirRootExternal)
    
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub ListFolderContent(folder As String) As String
    ruta = folder
    Listado.Initialize
    Listado = File.ListFiles(ruta)
    Listado.Sort(True)
    ListView1.Clear
    
    ListView1.AddSingleLine("..") ' Directorio superior
    For n = 0 To Listado.Size-1
    archivo = Listado.Get(n)
  
    If File.IsDirectory(ruta, archivo)=True Then
    ListView1.AddTwoLines2(archivo, "DIR", archivo)
    Else
    ListView1.AddSingleLine(archivo)
    End If
    Next
 
End Sub
Sub ListView1_ItemClick (Position As Int, Value As String)
Try
        Activity.Title = File.Combine(ruta & "/", Value)
        Label1.Text = File.Combine(ruta & "/", Value)
        
        If Value = ".." Then
            ' Elimina el último directorio de la ruta
            ' /mnt/sdcard/Android/data --->>> /mnt/sdcard/Android
            ruta = ruta.SubString2(0, ruta.LastIndexOf("/"))
            If ruta ="" Then ruta ="/"
 
            ListFolderContent(ruta)
            Value = ""
            Activity.Title = File.Combine(ruta & "/", Value)
            Label1.Text = File.Combine(ruta & "/", Value)
        Else
            If File.IsDirectory (ruta, Value) Then
            ListFolderContent(File.Combine(ruta & "/", Value))
            End If
        
        End If
Catch
        
        Msgbox("Error al entrar en el directorio","error")
        Value=""
        ListFolderContent("/")
        
End Try
End Sub  | 
        
        _______________________
        4.- Otro programa: Elegir archivos
                (no hace falta librería Dialogs)  
        
          
            |   Mediante el siguiente código podemos ver un listado de archivos que se encuentran en /mnt/sdcard, este directorio se refiere a la tarjeta de memoria SD, que en el código se llama mediante DirRootExternal. Para realizar este proyecto vamos al Designer y ubicamos: Label1, Label2 y un ScrollView1. Luego guardamos el Designer llamándolo Layout.
 Con este código no es necesario añadir ninguna librería.  |  | 
        
        
          
            | Código del Basic4Android 
 | 
          
            | 
' Juan Antonio Villalpando
' juana1991@yahoo.com
Sub Process_Globals
End Sub
Sub Globals
    Dim label2 As Label
    Dim ScrollView1 As ScrollView
    Dim Send As Label    
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout")
Dim files As List
files = File.ListFiles(File.DirRootExternal) 'Toma todos los archivos de la raíz SD Card
ScrollView1.Panel.Height = 20dip * files.Size
For i = 0 To files.Size - 1
Dim Label1 As Label
Label1.Initialize("Label1")
Label1.Text = files.Get(i)
Label1.Tag=files.Get(i)
ScrollView1.Panel.AddView(Label1, 25dip, 1dip + i * 20dip, ScrollView1.Width, 18dip)
Next
End Sub
Sub Label1_Click
Send=Sender 
Label2.Text = File.DirRootExternal & "/" &  Send.Tag
End Sub | 
        
         _______________________
        5.- Ejemplos con archivos. Guardar, Leer y Escribir. 
                (no hace falta librería Dialogs) 
        NOTA: si tienes problemas al escribir en la SdCard (DirRootExternal), añade estas líneas en el AndroidManifest.xml
        (Project / Manifest Editor)
         AddPermission ("android.permission.WRITE_EXTERNAL_STORAGE") 
  AddPermission ("android.permission.READ_EXTERNAL_STORAGE") 
        ____________________________________________________
        En el tutorial del foro se explica las distintas posibilidades que tiene la lectura, escritura, borrado... de archivo:
        http://www.basic4ppc.com/android/help/files.html 
        En los foros de Basic4Android en inglés explican y exponen el siguiente código como ejemplo de trabajo con archivos...
        Foros de Basic4Android: 
              http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/6690-text-files.html
         
        
          
            | Código del Basic4Android 
 | 
          
            | 
 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 | 
        
         TextWriter1.Initialize(File.OpenOutput(File.DirRootExternal, "Text.txt", False))
        Importante, según la línea anterior acabe en False o True, se añadirá o no un renglón.
  Es decir, si ponemos True, lo que escribamos se añadirá al archivo.
  Si ponemoa False, solo contendrá la última línea escrita. 
         _______________________
        6.- Aquí tenemos otro código más simple de escritura y lectura de archivo.
        (no hace falta librería Dialogs)  
        El Activity consta de un Layout y dentro de él, un EditText1, un Label1 y dos Botones.
        
        A la SD Card podemos acceder mediante LINUX entrando en el directorio: /mnt/sdcard
        
         
        
          
            | Escribe y lee un archivo de la SD Card 
 | 
          
            | 
'Activity module
Sub Process_Globals
End Sub
Sub Globals
    Dim pfilename As String
    
    pfilename = "ejemplo.txt"
    Dim EditText1 As EditText
    Dim Label1 As Label
    Dim linea As String
End Sub
Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout")
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Button1_Click
    Dim mFilePath As String
    linea = EditText1.Text
    If File.ExternalWritable = True Then
        'SD Card Installed
        mFilePath = File.DirRootExternal
    Else
        'No SD Card
        mFilePath = File.DirInternal
    End If
    Dim tw As TextWriter
    tw.Initialize(File.OpenOutput(mFilePath, pfilename, True))
    tw.WriteLine(linea)
'    tw.Write(linea)
    tw.Close
End Sub
Sub Button2_Click
    Dim mFilePath As String
    If File.ExternalWritable = True Then
        ' Hay tarjeta SD Card Instalada
        mFilePath = File.DirRootExternal
    Else
        'No hay tarjeta SD Card
        mFilePath = File.DirInternal
    End If
    If File.Exists(mFilePath, pfilename) = True Then
        Dim tr As TextReader
        tr.Initialize(File.OpenInput(mFilePath, pfilename))
        Label1.Text = tr.ReadLine
        'Label1.Text = ReadList(mFilePath, pfilename)
        Label1.Text = File.ReadString(mFilePath, pfilename)
'        Label1.Text = tr.ReadAll
        tr.Close
    End If    
End Sub | 
        
        
        _______________________        7.- Otro código de escritura y lectura de archivo.
    Guardar información en distintos :campos: de una línea. 
        (no hace falta librería Dialogs) 
        
          
            |  | Creamos un Layout, lo llamamos Layout. Insertamos: Label1.... Nombre Label2.... Edad
 Label3.... Ciudad
 EditText1EditText2
 EditText3
 Button1Button2
 | 
        
        En este caso escribimos tres datos: nombre, edad y ciudad y lo guardamos en el archivo fichero.txt
        Los datos se agrupan en una línea separada por un separador de campo, en este caso ":"
        Juan:23:Grazalema
        Si tenemos tarjeta de memoria SD Card, se guardará alli, si no la tenemos se guardará en el directorio interno. 
        Escribimos la línea con este código:
         escribir.Initialize(File.OpenOutput(directorio, archivo, False)) 
    escribir.WriteLine(linea)
        Si en vez poner False, ponemos True, las distintas líneas que escribamos se añadirán al final de la última.
  En este código particular no vemos el efecto de añadir, solo se muestra una línea.
        El botón de lectura de código contiene esta línea de lectura:
         leer.Initialize(File.OpenInput(directorio, archivo))
    linea = leer.ReadLine
        Lee una línea, la línea obtenida es de la forma
        Juan:23:Grazalema
        
        Mediante las funciones de cadenas, se van obteniendo los distintos campos. 
        Esta función encuentra la primera aparición del carácter ":" y nos devuelve su posición, en este caso está en el lugar 4 
        linea.IndexOf2(":",0) ' 4
        Esta función toma los caracteres desde el 0 hasta el finalnombre 
        nombre = linea.SubString2(0, finalnombre) ' Juan
        Esta función muestra la longitud de la cadena. 
        finallinea = linea.Length ' 16
        Nota: una vez más este código se podría realizar con otros algoritmos: Listas, Maps, tablas... pero he querido presentar la opciones de cadenas.
        Este código nos puede servir para guardar las variables en un archivo, para que en el caso que el programa se apague o vaya a segundo plano, se guarden las variables, la parte de guardar de este código lo tendríamos que poner en Activity_Pause.
        
          
            | Escribe y lee datos en un archivo
 | 
          
            | 
' Juan Antonio Villalpando
    ' juana1991@yahoo.com
Sub Process_Globals
End Sub
Sub Globals
   Dim archivo As String
   archivo = "fichero.txt"
   Dim EditText1, EditTExt2, EditText3 As EditText
   Dim Label1, Label2, Label3 As Label
   Dim linea As String
   Dim nombre, edad, ciudad As String
End Sub
Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout")
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Button1_Click
    nombre = EditText1.Text
    edad = EditText2.Text
    ciudad = EditText3.Text
    ' Voy a unirlo todo en una línea con un separador de campo :
    '                 Juan:23:Grazalema
    linea = nombre & ":" & edad & ":" & ciudad
    
    Dim directorio As String
    If File.ExternalWritable = True Then
        ' Si hay SD Card lo guarda en ella
        directorio = File.DirRootExternal
    Else
        ' Si no hay SD Card lo guarda en directorio interno
        directorio = File.DirInternal
    End If
    
    Dim escribir As TextWriter
    ' Sobreescribe línea
    escribir.Initialize(File.OpenOutput(directorio, archivo, False))
    escribir.WriteLine(linea)
    escribir.Close
    
        EditText1.Text = ""
        EditText2.Text = ""
        EditText3.Text = ""
End Sub
Sub Button2_Click
    Dim directorio As String
    If File.ExternalWritable = True Then
        ' Si hay SD Card lo leerá de ella
        directorio = File.DirRootExternal
    Else
        ' Si no hay SD Card lo leerá del directorio interno
        directorio = File.DirInternal
    End If
    
    If File.Exists(directorio, archivo) = True Then
        Dim leer As TextReader
        ' Lee Línea
        leer.Initialize(File.OpenInput(directorio, archivo))
        linea = leer.ReadLine
        ' linea = Juan:23:Grazalema
        
        finalnombre = linea.IndexOf2(":",0) ' 4
        nombre = linea.SubString2(0, finalnombre) ' Juan
        EditText1.Text= nombre
        
        finaledad = linea.IndexOf2(":", finalnombre+1) ' 8
        edad = linea.SubString2(finalnombre+1, finaledad) ' 23
        EditText2.Text = edad
        
        finallinea = linea.Length ' 16
        ciudad = linea.SubString2(finaledad+1, finallinea) ' Grazalema
        EditText3.Text = ciudad        
        
        leer.Close
    End If    
End Sub
       | 
        
        NOTA: Para cortar (Split) una cadena en trozos según un separador de campo, se puede utilizar la instrucción:
         Dim  data  As String 
  data =  " 123,432,13,4,12,534 " 
  Dim  numbers()  As String 
  numbers =  Regex.Split( "," , data) 
  Dim  l  As List 
    l.Initialize2(numbers) 
    Log (l)
        Ver en el tutorial oficial.
        _______________________
        8.- Obtener un listado de los archivos que se encuentren en la SD Card
         Consultamos el archivo TweetRecursive de este tutorial:
         http://www.basic4ppc.com/forum/basic4android-updates-questions/12285-recursive-method-traversing-sdcard.html#post68941 
        Hay que tener en cuenta que según la marca del móvil o tablet, la SD Card estará "montada" en un directorio u otro.
        Ver en foros.
        En LINUX hay un archivo importante, llamado fstab, en donde están indicados los dispositivos montados y la forma en que se pueden montar.
        En Android ese archivo se llama vold.fstab y está en el directorio /system/etc
        _______________________
        9.- Ver un listado de los archivos que están en la carpeta File.
        (no hace falta librería Dialogs) 
        Dentro de cada carpeta de programa hay una subcarpeta llamada File, en ella suele estar el layout.bal, imagenes, sonidos...
        Los archivos de esta carpeta son estáticos, es decir, los podemos introducir mientras realizamos el programa, pero cuando el programa está en funcionamiento no podemos crear ni manipular archivos en esa carpeta, es un directorio de solo lectura.
        El directorio File, se representa en el código mediante: File.DirAssets 
        Para ver un listado de los archivos existentes en la carpeta Files mediante código podemos hacerlo así...
         
        
        
Dim Lista As List
Dim i As Int
    
Lista.Initialize 
Lista.AddAll(File.ListFiles(File.DirAssets)) 
Msgbox("Archivos = " & Lista.Size, "") 
For i = 0 To Lista.Size - 1 
Msgbox(Lista.Get(i), "") 
Next
        _______________________
        10.- Otra manera de ver un listado de archivos que están en la carpeta Files.
        (no hace falta librería Dialogs) 
        
  En este caso hace un listado de los archivos que extensión .txt que existen en esa carpeta.
        
          
            |  | 
          
            | ' https://www.b4x.com/android/forum/threads/path-assetsdir-does-not-exist.20718/  
'Read available files
Dim AllFiles As List
AllFiles.Initialize
AllFiles.AddAll(File.ListFiles(File.DirAssets))
Dim myDropDown As Spinner
myDropDown.Initialize("myDropDown")
Dim text As String
For I = 0 To AllFiles.Size -1
text = AllFiles.Get(I)
If text.IndexOf(".txt") > - 1 Then
myDropDown.Add(text)
End If 
Next
'Let the user select a file
Dim cd As CustomDialog
cd.AddView(myDropDown, 0, 0, 300, 40)
cd.Show("DropDown Title", "OK", "Cancel", "", Null)
text = myDropDown.SelectedItem
End Sub  | 
        
        En vez de poner la carpeta Files (File.DirAssets) se puede poner cualquier otra carpeta. 
        _______________________
        11.- Ver el árbol de directorios.
        También es interesante estudiar este ejemplo del foro. Se trata de mostrar los directorios y archivos, en este caso de la SdCard, en forma de árbol de directorios.
        Se nos presenta los directorios y archivos, y pulsando en un directorio podemos ver la información que contiene, es un explorador de archivos.
        Se encuentra en este foro y la podemos bajar en Treeview.zip 
        En el código podemos ver la línea:
        tv.rootnode.tag = File.DirRootExternal ' example for directory treeview
        en donde pondremos la raíz desde donde queremos ver los ficheros. 
        
        _______________________
        12.- Resumen de trabajo con carpetas y archivos. IMPORTANTE.
    (no hace falta dialogs)
        - Creamos con el Designer un Layout, lo llamamos "Layout" con estos botones: 
        
        Para permitir que se pueda leer y escribir en elementos externos debemos añadir estas líneas en el Manifest Editor
         AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)
        AddPermission(android.permission.READ_EXTERNAL_STORAGE ) 
        
          
            | Trabajo con carpeta y archivo. 
 | 
          
            | 
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
' Enero 2015
End Sub
Sub Globals
End Sub
Sub Activity_Create(FirstTime As Boolean)
  Activity.LoadLayout("Layout")
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Button1_Click
     If File.ExternalWritable = False Then
        Msgbox("La SdCard no tiene permiso de escritura.", "")
        Else
        Msgbox("La SdCard sí tiene permiso de escritura.", "")
    End If
    If File.ExternalReadable = False Then
        Msgbox("La SdCard no tiene permiso de lectura.", "")
        Else
        Msgbox("La SdCard sí tiene permiso de lectura.", "")
    End If
End Sub
' Crea una carpeta
Sub Button2_Click
     If File.Exists(File.DirRootExternal, "MiCarpeta" ) = False Then '
        File.MakeDir(File.DirRootExternal, "MiCarpeta")
        Msgbox("Se ha creado MiCarpeta.", "")
    Else
         Msgbox("MiCarpeta ya existía.", "")
    End If     
End Sub
' Borra una carpeta
Sub Button3_Click
     If File.Exists(File.DirRootExternal, "MiCarpeta" ) = False Then '
         Msgbox("MiCarpeta no existía.", "")
    Else
        File.Delete(File.DirRootExternal,"MiCarpeta")
        Msgbox("Acaba de ser borrada MiCarpeta.", "")
    End If    
End Sub
' Crea un archivo de texto
Sub Button4_Click
     If File.Exists(File.DirRootExternal, "/MiCarpeta/MiArchivo.txt" ) = False Then '
       File.WriteString(File.DirRootExternal, "/MiCarpeta/MiArchivo.txt","")
       Msgbox("Se ha creado MiArchivo.", "")
    Else
        Msgbox("MiArchivo ya existía.", "")
    End If    
End Sub
' Borra un archivo
Sub Button5_Click
     If File.Exists(File.DirRootExternal, "/MiCarpeta/MiArchivo.txt" ) = False Then '
       Msgbox("MiArchivo.txt no existía.", "")
    Else
       File.Delete(File.DirRootExternal,"/MiCarpeta/MiArchivo.txt")
       Msgbox("Acaba de ser borrado MiArchivo.txt.", "")
    End If    
End Sub
' Escribir hola en un archivo mediante WriteString
' (Se puede crear un archivo y a la vez escribirle algo)
' Con esta forma de WriteString solo podemos escribir una vez cuando creamos el archivo nuevo.
' Si escribimos otra vez se borrará lo anterior.
' Por eso cuando escribes varias veces solo se ve la última línea.
' Se pueden escribir varias líneas mediante una List
Sub Button6_Click
     If File.Exists(File.DirRootExternal, "/MiCarpeta/MiArchivo.txt" ) = False Then '
       Msgbox("MiArchivo.txt no existía. No se puede ESCRIBIR. Crealo antes", "")
    Else
       File.WriteString(File.DirRootExternal, "/MiCarpeta/MiArchivo.txt","hola")
       Msgbox("Ya he escrito la palabra: 'hola'", "")
    End If    
End Sub
' Leer el contenido de un archivo.
Sub Button7_Click
     If File.Exists(File.DirRootExternal, "/MiCarpeta/MiArchivo.txt" ) = False Then '
       Msgbox("MiArchivo.txt no existía. No se puede LEER. Crealo antes", "")
    Else
       Msgbox(File.ReadString(File.DirRootExternal, "/MiCarpeta/MiArchivo.txt"), "")
    End If    
End Sub
' Escribir adios en un archivo mediante TextWriter
' Con TextWriter se pueden escribir varios renglones con facilidad.
' Luego podemos leerlo con el ReadString (Button7) visto anteriormente
Sub Button8_Click
     If File.Exists(File.DirRootExternal, "/MiCarpeta/MiArchivo.txt" ) = False Then
       Msgbox("MiArchivo.txt no existía. No se puede ESCRIBIR. Crealo antes", "")
    Else
       Dim TextWriter1 As TextWriter
       TextWriter1.Initialize(File.OpenOutput(File.DirRootExternal, "/MiCarpeta/MiArchivo.txt", True)) ' Si ponemos False al final de la línea anterior, solo escribe una línea
       TextWriter1.WriteLine("adios")
       TextWriter1.Close
       Msgbox("Ya he escrito la palabra: 'adios'", "")
    End If    
End Sub
' Otra forma de leerlo es mediante TextReader
'    Dim TextReader1 As TextReader
'    TextReader1.Initialize(File.OpenInput(File.DirRootExternal, "/MiCarpeta/MiArchivo.txt"))
'    Dim linea As String
'    linea = TextReader1.ReadLine    
'    Do While linea <> Null
'        Log(linea) 
'        linea = TextReader1.ReadLine
'    Loop
'    TextReader1.Close
 | 
        
        _______________________
        _______________________        
        - Recordamos tres lugares de directorios.
        Ejecuta esta órdenes para comprobar la ruta de cada directorio
        
           Msgbox(File.DirRootExternal, "") 
          Msgbox(File.DirAssets, "") 
          Msgbox(File.DirInternal, "") 
          Msgbox(File.DirDefaultExternal, "")
         
        DirAssets es el directorio del programa C:\Android\<Programa>\Files
  es un directorio de solo lectura durante la ejecución del programa, por lo tanto no podemos (desde el programa), cambiar nada en él.
        
  Carpeta Files, de solo lectura durante la ejecución del programa.
        DirRootExternal es un directorio en la tarjeta de memoria SD de nuestro móvil. Si tenemos un directorio que se llama Fotos, podemos ir a ese directorio de esta manera...
        out = File.OpenOutput(File.DirRootExternal & "/" & "Fotos", "foto2.jpg", True)
        ATENCIÓN, consulta al final de esta página una aclaración importante sobre DirRootExternal, no es la tarjetita que insertamos a nuestro móvil. 
        - Podemos llegar a la SD Card, entrando en... /mnt/sdcard
        Esto lo debemos hacer desde el shell de LINUX como vimos en un tutorial anterior.
        La manera de llegar a ese directorio es yendo a linux y pasando a la carpeta
        cd /mnt/sdcard
        ls
        DirInternal es un directorio existente en nuestro Programa y que solo podemos acceder mediante ese Programa. 
  Para ver el listado de archivos en ese directorio, lo debemos hacer mediante el shell del LINUX, esto lo he comentado anteriormente y se explica con más detalle en el tutorial LINUX. Este directorio se encuentra en una subcarpeta de nuestro Programa, pero no podemos verlo mediante el Explorador de Windows. 
        out = File.OpenOutput(File.DirInternal & "/" , "logo2.png", True)
        La manera de llegar a ese directorio es yendo a linux y pasando a la carpeta
        cd /data/data/<tu.programa>/files
        ls
        
    DirInternal visto con Dalvik Debug Monitor.
    /data/data/com.variasmarcas/files
        - Copiar un archivo desde la carpeta Files a la DirInternal 
        File.Copy(File.DirAssets,"web4.htm", File.DirInternal,"web4.htm")
         
        DirDefaultExternal es el directorio por defecto de la aplicación en el móvil. Puede acceder a él cualquier aplicación mediante la ruta [external device]/Android/data/[package name]/files/ 
        Por ejemplo: /mnt/sdcard/Android/data/tu.programa/files/
        La manera de llegar a ese directorio es yendo a linux y pasando a la carpeta
        cd /mnt/sdcard/Android/data/tu.programa/files
        ls
         
        
        DirDefaultExternal visto con Dalvik Debug Monitor. 
    /mnt/sdcard/Android/data/com.variasmarcas/files 
        - Copiar un archivo desde la carpeta Files a la DirDefaultExternal
        File.Copy(File.DirAssets,"web4.htm", File.DirDefaultExternal,"web4.htm")
        _________________________________________
          - Aclaraciones sobre DirRoorExternal.
        Hay dudas acerla de DirRootExternal, no es la tarjetita de memoria que insertamos en el móvil o tablet, esto se refiere a una memoria del dispositivo interno. Para llegar a la tarjetita externa de memoria que insertamos, debemos saber su dirección, de la forma /mnt/sdcard, esto no es tan fácil de saber ya que cada dispositivo según su marca y modelo la monta en un sitio distinto.
        Debemos investigar dónde en qué dirección está nuestra tarjetita de memoria.
        _________________________________________
          - En los foros leemos:
         DirRootExternal No es tu SdCard Externa (no es la tarjetita que tienes insertada), es la SdCard interna.
        Los Dispositivos tienen al menos dos almacenamientos estándar, el interno y el externo. Si el dispositivo también tiene una SdCard esta será la tercera SdCard Externa.
        Es decir, el directorio DirRootExternal no es nuestra tarjeta de memoria SdCard, es una memoria interna del dispositivo.
        Si queremos ir a nuestra tarjeta debemos consultar el archivo vold.fstab para ver dónde está montada y luego llamarla escribiendo su dirección, por ejemplo: /mnt/sdcard
        Más adelante dice que el acceso a la tarjeta externa SdCard es limitado a partir de la versión 4.4 de Android 
        Se puede obtener la dirección de la tarjeta SdCard externa mediante su dirección de absoluta de LINUX
        en este mensaje lo indican.
        Por ejemplo podría ser
    /mnt/sdcard/ext-sd
    /storage/sdcard0
    /mnt/sdcard/exStorages/SdCard
    /mnt/sdcard/sdcard1
    /sdcard 1
    /mnt/sdcard/external_sd
    /mnt/sdcard
    /Removable/MicroSD
        Pero... Se podría ver dónde está montada desde del archivo vold.fstab, pero desde la versión 4.3 este archivo ya no está presente ha sido sustituido por fstab.xxx y para leerlo es necesario permiso de root. 
            
            http://stackoverflow.com/questions/19272852/vold-fstab-file-in-android-4-3  
        Así que si quieres entrar en tu tarjeta SdCard, primero debes saber dónde está montada, algo así... /mnt/sdcard (dependiendo de la marca y modelo del móvil será una dirección distinta) 
        
        Una vez que sepa dónde está la tarjeta ya puedes trabajar con ella de la forma...
         If File .Exists( "" ,  "/mnt/sdcard/MiCarpeta/MiArchivo.txt" )  Then