Я знаю, что этот вопрос задавался пару раз, но я пытаюсь создать функцию регистрации, которая сохраняет 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();
}