Programación en Vala/Bibliotecas del lenguaje

De Wikilibros, la colección de libros de texto de contenido libre.

Esta sección se encargará de describir el uso de las principales bibliotecas que se necesitan en la mayoría de los casos a la hora de desarrollar una aplicación. Sin embargo no se tratará la gran cantidad de bibliotecas que existen dentro del lenguaje de programación Vala, ya que existen diversas documentaciones sobre cada biblioteca específica. Así para consultar todas las bibliotecas que son accesibles desde el lenguaje en la actualidad se puede consultar la página de documentación de vala.

Acceso a ficheros en Vala (biblioteca GIO)[editar]

La biblioteca de funciones GIO es similar en funcionalidad al framework IO de Java. Esta biblioteca contiene objetos para el trabajo con ficheros, tanto para lectura como para escritura. Contiene dos clases base, una para lectura y otra para escritura: InputStream y OutputStream. Cuando se abre un fichero para su lectura se obtiene una referencia a un objeto de la clase InputStream.

Los flujos se pueden usar con el patrón de diseño decorador para suministrar funcionalidad adicional. Por ejemplo es posible leer el contenido de un fichero línea a línea mediante un DataInputStream. O se puede aplicar un FileInputStream para realizar algún filtrado de datos.

Leer un fichero línea a línea[editar]

El siguiente ejemplo lee el contenido de un fichero de texto línea a línea y escribe el texto por pantalla.

static int main (string[] args) {
    // Referencia a un fichero llamado 'data.txt'
    var file = File.new_for_path ("data.txt");

    if (!file.query_exists (null)) { // Se comprueba si el fichero existe o no
        stderr.printf ("File '%s' doesn't exist.\n", file.get_path ()); // No existe y se muestra un mensaje de error
        return 1;
    }

    try {
        // Se abre un fichero para lectura y se convierte el FileInputStream en un
        // DataInputStream, para que se pueda leer línea a línea
        var in_stream = new DataInputStream (file.read (null));
        string line;
        // Se lee la línea hasta que se devuelva un null que indica que se ha llegado al final del fichero
        while ((line = in_stream.read_line (null, null)) != null) {
            stdout.printf ("%s\n", line);
        }
    } catch (Error e) { // Si se produce un error se muestra
        error ("%s", e.message);
    }

    return 0;
}