Para poder tratar ficheros en el almacenamiento interno de java se realiza de la misma forma que en java nativo. Para este ejemplo se utilizará un arraylist de números que será guardado en un objeto de tipo .obj.
Lo primero que se debe hacer es dar permisos de escritura a la aplicación completa mediante declaración en el manifest, tanto para leer como para escribir
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Una vez otorgados los permisos se creará gestionarán las acciones mediante la pulsación de los botones:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"> <Button android:id="@+id/abrirFichero" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Abrir fichero"/> <Button android:id="@+id/guardarFichero" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Guardar fichero"/> </LinearLayout> </LinearLayout>
Con los elementos llevados al .java se tratan los ficheros. Para poder leer ficheros:
private void leerFicheros() { try { FileInputStream fis = openFileInput("fichero.obj"); ObjectInputStream ois = new ObjectInputStream(fis); lista = (ArrayList) ois.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { for (Object o : lista) { Log.v("test", o.toString()); } } }
Para poder guardar ficheros:
private void guardarFicheros() { lista = new ArrayList(); for (int i = 0; i < 10; i++) { lista.add(i); } try { FileOutputStream fos = openFileOutput("fichero.obj", Context.MODE_PRIVATE); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(lista); oos.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } }
Cuando se crea el FileInputStream se utiliza el openFileOutput, pasando como argumentos el nombre del fichero que se quiere abrir y el tipo de acceso, siendo el modo privado el. normal para que solo se pueda acceder desde el paquete
FileOutputStream fos = openFileOutput("fichero.obj", Context.MODE_PRIVATE);
El código completo de la aplicación es:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { Toolbar barra; Button botonAbrir, botonGuardar; private File f; ArrayList lista; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); barra = findViewById(R.id.barra); setSupportActionBar(barra); getSupportActionBar().setTitle("Tratamiento de ficheros"); instancias(); acciones(); } private void acciones() { botonAbrir.setOnClickListener(this); botonGuardar.setOnClickListener(this); } private void instancias() { botonAbrir = findViewById(R.id.abrirFichero); botonGuardar = findViewById(R.id.guardarFichero); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.abrirFichero: leerFicheros(); break; case R.id.guardarFichero: guardarFicheros(); break; } } private void guardarFicheros() { lista = new ArrayList(); for (int i = 0; i < 10; i++) { lista.add(i); } try { FileOutputStream fos = openFileOutput("fichero.obj", Context.MODE_PRIVATE); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(lista); oos.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } private void leerFicheros() { try { FileInputStream fis = openFileInput("fichero.obj"); ObjectInputStream ois = new ObjectInputStream(fis); lista = (ArrayList) ois.readObject(); } catch (IOException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } finally { for (Object o : lista) { Log.v("test", o.toString()); } } } }