Java - чтение и запись hashmap в csv (для чтения на компьютере) - PullRequest
0 голосов
/ 08 ноября 2018

Я знаю, что этот вопрос задавался пару раз, но я пытаюсь создать функцию регистрации, которая сохраняет hashmap как csv на SD-карте, если она доступна, или во внутренней памяти, если SD-карта не установлена. Я пытался, но безуспешно - Сейчас он работает с TXT-файлом - Но он не читается на компьютере (угадайте что-то с форматом), и меня больше интересует CSV.

Так вот в чем дело: когда действие открыто, оно должно проверить по заданным путям, доступен ли csv-файл или нет - если он недоступен, он должен просто создать новый hashmap на основе текущей даты и создать новый csv файл, сохраняющий ключи и значения, которые будут помещены в Hashmap - вот и все. Извините за мое плохое описание - надеюсь, кто-то может помочь ..

public class Data extends AppCompatActivity {

private TextView request1textview;
private TextView request2textview;
private TextView feedback1textview;
private TextView feedback2textview;

private Button request1button;
private Button request2button;
private Button feedback1button;
private Button feedback2button;
private Button newDay;
private Button reset;

public String subFolder = "/LogData";
public String filename = "LogFile.txt";
private static final String TAG = "MEDIA";




public HashMap<String, Integer> LogHashmap = new HashMap<String, Integer>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_logging_data);

    request1textview = (TextView) findViewById(R.id.request1textview);
    request2textview = (TextView) findViewById(R.id.request2textview);
    feedback1textview = (TextView) findViewById(R.id.feedback1textview);
    feedback2textview = (TextView) findViewById(R.id.feedback2textview);

    request1button = (Button) findViewById(R.id.button);
    feedback2button = (Button) findViewById(R.id.button2);
    request2button = (Button) findViewById(R.id.button5);
    feedback2button = (Button) findViewById(R.id.button6);

    readFile();
}

public void save(String key) {

    if (LogHashmap.containsKey(key)) {
        LogHashmap.put(key, LogHashmap.get(key)+1);
        writeToFile();
    }

    else if (!LogHashmap.containsKey(key)) {
        LogHashmap.put(key, 1);
        writeToFile();
    }

    if (key == "Request1") {
        request1textview.setText(String.valueOf(LogHashmap.get(key)));
        Toast.makeText(this, "Request1 value is: " + LogHashmap.get(key), Toast.LENGTH_SHORT).show();
    }

    if (key == "Request2") {
        request2textview.setText(String.valueOf(LogHashmap.get(key)));
        Toast.makeText(this, "Request2 value is: " + LogHashmap.get(key), Toast.LENGTH_SHORT).show();
    }
}


public void writeToFile() {
    //write to file

    File cacheDir = null;
    File appDirectory = null;

    if (android.os.Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        cacheDir = getApplicationContext().getExternalCacheDir();
        appDirectory = new File(cacheDir + subFolder);
    }

    else {
        cacheDir = getApplicationContext().getCacheDir();
        String BaseFolder = cacheDir.getAbsolutePath();
        appDirectory = new File(BaseFolder + subFolder);
    }

    if (appDirectory != null && !appDirectory.exists()) {
        appDirectory.mkdirs();
    }

    File file = new File(appDirectory, filename);

    FileOutputStream fos = null;
    ObjectOutputStream out = null;


    try {
        fos = new FileOutputStream(file);
        out = new ObjectOutputStream(fos);
        out.writeObject(LogHashmap);
        System.out.println(LogHashmap);
    } catch (IOException ioe) {
        ioe.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (fos != null) {
                fos.flush();
                fos.close();
                if (out != null) {
                    out.flush();
                    out.close();
                }
            }
        } catch (Exception e) {

        }
    }
}


public void readFile() {

    File cacheDir = null;
    File appDirectory = null;

    if (android.os.Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
        cacheDir = getApplicationContext().getExternalCacheDir();
        appDirectory = new File (cacheDir + subFolder);
    } else {
        cacheDir = getApplicationContext().getCacheDir();
        String BaseFolder = cacheDir.getAbsolutePath();
        appDirectory = new File (BaseFolder + subFolder);
    }

    if (appDirectory != null && !appDirectory.exists()) {
        return;
    }

    File file = new File (appDirectory, filename);

    FileInputStream fis = null;
    ObjectInputStream in = null;



    try {
        fis = new FileInputStream(file);
        in = new ObjectInputStream(fis);
        HashMap<String, Integer> tempHashmap = (HashMap<String, Integer>) in.readObject();
        LogHashmap = tempHashmap;
        Toast.makeText(this, "Count of hashmaps:: " + LogHashmap.size() + " " + LogHashmap, Toast.LENGTH_SHORT).show();


    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (StreamCorruptedException e) {
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (fis != null) {
                fis.close();
            }
            if (in != null) {
                in.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    Toast.makeText(this, ""+ appDirectory, Toast.LENGTH_SHORT).show();
}
...