Creación de un juego (2): Modulo FileIO

Empezamos con uno de los módulos mas fáciles, que sera el encargado de leer o escribir en archivos. Para ello crearemos InputStream y OutputStream, que se podrían definir como mecanismos estándar de Java para leer y escribir en archivos. A parte añadiremos un nuevo método relacionado con SharedPrefernces.

La lectura de archivos sera muy usada para los archivos de nivel, imagenes y archivos de audio. En cambio la escritura la usaremos con menos frecuencia para mantener las puntuaciones, configuraciones del juego o guardar un estado del juego para que el usuario pueda volver donde lo había dejado.



1. Interface FileIO
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public interface FileIO {

    public InputStream leerAsset(String fileName) throws IOException;

    public InputStream leerFile(String fileName) throws IOException;

    public OutputStream escribirFile(String fileName) throws IOException;
}

Como se puede observar hemos declarado 3 métodos:
leerAsset: lo usaremos para leer los fichero de la carpeta assets.
leerFile: nos servirá para leer los archivos que hemos creado.
escribirFile: y el ultimo lo usaremos para guardar en un archivo las puntuaciones, configuraciones, ...
Los dos primeros métodos nos devolverán un InputStream (una fuente donde leer bytes) y el ultimo un OutputStream (una fuente donde escribir bytes). En los tres métodos le pasamos como parámetro "fileName" que sera el nombre del archivo a leer o escribir. También manejamos la IOException que se encargara de manejar los errores que pueda haber en la lectura o escritura.



2. Implementar interface FileIO
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.AssetManager;
import android.os.Environment;
import android.preference.PreferenceManager;

import com.example.slange.interfaces.FileIO;

public class AndroidFileIO implements FileIO {
 
    Context mcontext;
    AssetManager assets;
    String externalStoragePath;
    
    public AndroidFileIO(Context context) {
        this.context = context;
        this.assets = context.getAssets();
        this.externalStoragePath = Environment.getExternalStorageDirectory()
                .getAbsolutePath() + File.separator;
    }
    
    public InputStream leerAsset(String fileName) throws IOException {
        return assets.open(fileName);
    }
    
    public InputStream leerFile(String fileName) throws IOException {
        return new FileInputStream(externalStoragePath + fileName);
    }

    public OutputStream escribirFile(String fileName) throws IOException {
        return new FileOutputStream(externalStoragePath + fileName);
    }
    
    public SharedPreferences getPreferences() {
        return PreferenceManager.getDefaultSharedPreferences(context);
    }
}

Primero creamos tres objetos: un Context, un AssetManager y un String. Después en el constructor de nuestra clase indicamos como parámetro un context que sera almacenado en nuestro objeto mcontext, seguimos almacenando una instancia AssetManager en el objeto assets, y para terminar almacenamos la raíz de nuestro almacenamiento externo en el objeto externalStoragePath.

Con el método leerAsset podremos abrir cualquier archivo ubicado en la carpeta assets de nuestro proyecto, para ello hacemos uso del método open. Como parámetro indicaremos el archivo a abrir.

En el método leerFile creamos un nuevo FileInputStream indicando como parámetro el nombre del archivo. Esto nos devolverá un archivo para su lectura.

El método escribirFile hace lo contrario, nos devolverá un archivo para su lectura.

Y por ultimo hemos añadido un nuevo método, getPreferences, que nos devuelve una instancia SharedPreferences que podremos usar tanto para leer como para escribir en un archivo de preferencias.

Para terminar, comentar que podríamos añadir un método para comprobar si el almacenamiento externo esta montado, es solo de lectura o simplemente no se dispone de él.


CODIGO DE EJEMPLO: DESCARGAR

No hay comentarios:

Publicar un comentario