Java 如何将Hashmap数据(可变键/值大小)转储到Android Studio中特定内存位置的.csv文件中?
我的hashmap将Java 如何将Hashmap数据(可变键/值大小)转储到Android Studio中特定内存位置的.csv文件中?,java,android,csv,Java,Android,Csv,我的hashmap将字符串类型作为键,将数组列表类型作为值,例如{“v1”=[1.1,1.2,1.3],“v2”=[2.1,2.2,2.3,2.4]}其中“v1”和“v2”是键。有40多个键(以前未知大小),每个键都有一个ArrayList,其大小可能不一致(大小>200)。 我想在我的Android手机中以.csv文件的格式将此hashmap数据写入以下格式 v1 v2 1.1 2.1 1.2 2.2 1.3 2.3 到目前为止,我的Hashmap具有固定的键/数组大小,我使用以
字符串类型作为键,将数组列表类型作为值,例如{“v1”=[1.1,1.2,1.3],“v2”=[2.1,2.2,2.3,2.4]}
其中“v1”
和“v2”
是键。有40多个键(以前未知大小),每个键都有一个ArrayList
,其大小可能不一致(大小>200)。
我想在我的Android手机中以.csv文件的格式将此hashmap数据写入以下格式
v1 v2
1.1 2.1
1.2 2.2
1.3 2.3
到目前为止,我的Hashmap具有固定的键/数组大小,我使用以下代码段转储数据:
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
File folder = new File(Environment.getExternalStorageDirectory() + "/santobedi" + hour + "-" + minute + "-" + second);
String csv = folder.getAbsolutePath() + "/data.csv";
try {
file_writer = new FileWriter(csv, true);
if (isReady == false) {
String s = "v1, v2,\n";
file_writer.append(s);
isReady = true; // The columns heads are set
}
} catch (IOException e) {
e.printStackTrace();
}
稍后,我将(按行)在循环中附加值,检查布尔值isReady
。现在,键的大小不是固定的,所以我不能像以前那样设置列标题。我在寻找一个可能的解决方案,这个问题和我的情况差不多。然而,这与安卓手机内部的内存位置无关,公认的答案仍然不能解决我的问题
请帮忙 我用以下方法解决了我的问题:
public FileWriter file_writer;
Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
File folder = new File(Environment.getExternalStorageDirectory() + "/Santobedi" + hour + "-" + minute + "-" + second);
folder.mkdir();
String csv = folder.getAbsolutePath() + "/data.csv";
try { file_writer = new FileWriter(csv, true);
} catch (IOException e) {
e.printStackTrace();
}
稍后,使用writeToCSV
方法将数据追加到文件\u writer
中,如下所示:
public void writeToCsv() throws IOException {
for(Map.Entry<String , ArrayList<Float>>IwantItasColumn:myHashMap.entrySet())
{
String s = "";
for(int i =0; i<IwantItasColumn.getValue().size();i++)
{
s = s+ ","+ String.valueOf(IwantItasColumn.getValue().get(i));
}
s = AccessPointId.getKey() + "," + s + "\n";
file_writer.append(s);
}
try {
file_writer.close();
} catch (IOException e) {
e.printStackTrace();
}}
在Excel
中进行简单的行到列转换可以得到所需的结果
v1 1.1 1.2 1.3
v2 2.1 2.2 2.3