package com.github.mikephil.charting.utils; import android.content.res.AssetManager; import android.os.Environment; import android.util.Log; import com.github.mikephil.charting.data.BarEntry; import com.github.mikephil.charting.data.Entry; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; /** * Utilities class for interacting with the assets and the devices storage to * load and save DataSet objects from and to .txt files. * * @author Philipp Jahoda */ public class FileUtils { private static final String LOG = "MPChart-FileUtils"; /** * Loads a an Array of Entries from a textfile from the sd-card. * * @param path the name of the file on the sd-card (+ path if needed) * @return */ public static List<Entry> loadEntriesFromFile(String path) { File sdcard = Environment.getExternalStorageDirectory(); // Get the text file File file = new File(sdcard, path); List<Entry> entries = new ArrayList<Entry>(); try { @SuppressWarnings("resource") BufferedReader br = new BufferedReader(new FileReader(file)); String line; while ((line = br.readLine()) != null) { String[] split = line.split("#"); if (split.length <= 2) { entries.add(new Entry(Float.parseFloat(split[0]), Integer.parseInt(split[1]))); } else { float[] vals = new float[split.length - 1]; for (int i = 0; i < vals.length; i++) { vals[i] = Float.parseFloat(split[i]); } entries.add(new BarEntry(vals, Integer.parseInt(split[split.length - 1]))); } } } catch (IOException e) { Log.e(LOG, e.toString()); } return entries; // File sdcard = Environment.getExternalStorageDirectory(); // // // Get the text file // File file = new File(sdcard, path); // // List<Entry> entries = new ArrayList<Entry>(); // String label = ""; // // try { // @SuppressWarnings("resource") // BufferedReader br = new BufferedReader(new FileReader(file)); // String line = br.readLine(); // // // firstline is the label // label = line; // // while ((line = br.readLine()) != null) { // String[] split = line.split("#"); // entries.add(new Entry(Float.parseFloat(split[0]), // Integer.parseInt(split[1]))); // } // } catch (IOException e) { // Log.e(LOG, e.toString()); // } // // DataSet ds = new DataSet(entries, label); // return ds; } /** * Loads an array of Entries from a textfile from the assets folder. * * @param am * @param path the name of the file in the assets folder (+ path if needed) * @return */ public static List<Entry> loadEntriesFromAssets(AssetManager am, String path) { List<Entry> entries = new ArrayList<Entry>(); BufferedReader reader = null; try { reader = new BufferedReader( new InputStreamReader(am.open(path), "UTF-8")); String line = reader.readLine(); while (line != null) { // process line String[] split = line.split("#"); if (split.length <= 2) { entries.add(new Entry(Float.parseFloat(split[0]), Integer.parseInt(split[1]))); } else { float[] vals = new float[split.length - 1]; for (int i = 0; i < vals.length; i++) { vals[i] = Float.parseFloat(split[i]); } entries.add(new BarEntry(vals, Integer.parseInt(split[split.length - 1]))); } line = reader.readLine(); } } catch (IOException e) { Log.e(LOG, e.toString()); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { Log.e(LOG, e.toString()); } } } return entries; // String label = null; // List<Entry> entries = new ArrayList<Entry>(); // // BufferedReader reader = null; // try { // reader = new BufferedReader( // new InputStreamReader(am.open(path), "UTF-8")); // // // do reading, usually loop until end of file reading // label = reader.readLine(); // String line = reader.readLine(); // // while (line != null) { // // process line // String[] split = line.split("#"); // entries.add(new Entry(Float.parseFloat(split[0]), // Integer.parseInt(split[1]))); // line = reader.readLine(); // } // } catch (IOException e) { // Log.e(LOG, e.toString()); // // } finally { // // if (reader != null) { // try { // reader.close(); // } catch (IOException e) { // Log.e(LOG, e.toString()); // } // } // } // // DataSet ds = new DataSet(entries, label); // return ds; } /** * Saves an Array of Entries to the specified location on the sdcard * * @param ds * @param path */ public static void saveToSdCard(List<Entry> entries, String path) { File sdcard = Environment.getExternalStorageDirectory(); File saved = new File(sdcard, path); if (!saved.exists()) { try { saved.createNewFile(); } catch (IOException e) { Log.e(LOG, e.toString()); } } try { // BufferedWriter for performance, true to set append to file flag BufferedWriter buf = new BufferedWriter(new FileWriter(saved, true)); for (Entry e : entries) { buf.append(e.getVal() + "#" + e.getXIndex()); buf.newLine(); } buf.close(); } catch (IOException e) { Log.e(LOG, e.toString()); } } public static List<BarEntry> loadBarEntriesFromAssets(AssetManager am, String path) { List<BarEntry> entries = new ArrayList<BarEntry>(); BufferedReader reader = null; try { reader = new BufferedReader( new InputStreamReader(am.open(path), "UTF-8")); String line = reader.readLine(); while (line != null) { // process line String[] split = line.split("#"); entries.add(new BarEntry(Float.parseFloat(split[0]), Integer.parseInt(split[1]))); line = reader.readLine(); } } catch (IOException e) { Log.e(LOG, e.toString()); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { Log.e(LOG, e.toString()); } } } return entries; // String label = null; // ArrayList<Entry> entries = new ArrayList<Entry>(); // // BufferedReader reader = null; // try { // reader = new BufferedReader( // new InputStreamReader(am.open(path), "UTF-8")); // // // do reading, usually loop until end of file reading // label = reader.readLine(); // String line = reader.readLine(); // // while (line != null) { // // process line // String[] split = line.split("#"); // entries.add(new Entry(Float.parseFloat(split[0]), // Integer.parseInt(split[1]))); // line = reader.readLine(); // } // } catch (IOException e) { // Log.e(LOG, e.toString()); // // } finally { // // if (reader != null) { // try { // reader.close(); // } catch (IOException e) { // Log.e(LOG, e.toString()); // } // } // } // // DataSet ds = new DataSet(entries, label); // return ds; } }