Home / Programmazione / Java Android / Leggere file in Android
Mattepuffo

Leggere file in Android

Leggere file in Android

La gestione dei file in Android è più semplice di quello che si pensi.

Nel mio caso ho una app che usa dei file JSON per avere sempre i dati offline; file scaricati da un server remoto.

Sono in formato JSON per riempire una ListView, ma il concetto va bene per qualsiasi tipo di file.

I miei file sono salvati nell'external storage, quindi prima di tutto impostiamo i permessi nel manifest:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Poi nell'Activity impostiamo il path verso lo storage (mi raccomando, metterlo nell'activity):

private String path = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;

Questo rappresenta la external storage directory, al quale dobbiamo aggiungere poi il file che ci interessa.

Adesso il metodo per leggere il file:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class JsonFile {
    
    public static String read(String strFile) throws IOException {
        File file = new File(strFile);
        StringBuilder sb = new StringBuilder();
        if(file.exists()) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line).append("\n");
            }
            reader.close();
        }
        return sb.toString();
    }
    
}

A questo punto nella nostra Activity riempiamo la ListView:

     try {
            JSONArray jsonArray = new JSONArray(JsonFile.read(path + "last_entries.json"));
            for(int i = 0; i < jsonArray.length(); i++) {
                JSONObject jo = jsonArray.getJSONObject(i);
                HashMap<String, String> map = new HashMap<String, String>();
                map.put("valore", jo.getString("valore"));
                list.add(map);
            }
        } catch (ClientProtocolException ex) {
        } catch (IOException ex) {
        } catch (JSONException ex) {
        }
        
        adapter = new SimpleAdapter(getActivity(), list, R.layout.list_items, new String[] { "valore" },
                new int[] { R.id.txt_valore });
        lv.setAdapter(adapter);

A JsonFile.read passiamo il path relativo all'external storage più il file da leggere.

Poi riempiamo la ListView dal contenuto del file.

Così facendo abbiamo trasformato questo esempio, che prendeva i dati direttamente da database, in una app offline.

Dovete solo creare le azioni per la creazione e l'aggiornamento in modo che l'utente possa avere i dati sincronizzati con il db.

Ciao!