我正在使用以下功能来保存一些数据。 mydata是用户输入的双列表,而date_Strings是列表(使用String作为数据类型),其中包含字符串格式的日期。
public void savefunc(){
SimpleDateFormat thedate = new SimpleDateFormat("dd/MM/yyyy",Locale.US);
Date d=new Date();
String formattedDate=thedate.format(d);
dates_Strings.add(formattedDate);
double thedata=Double.parseDouble(value.getText().toString().trim());
mydata.add(thedata);
File sdCard = Environment.getExternalStorageDirectory();
File directory = new File (sdCard, "MyFiles");
directory.mkdirs();
File file = new File(directory, filename);
FileOutputStream fos;
try {
fos = new FileOutputStream(file,true);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));
for (int i=0;i<mydata.size();i++){
bw.write(mydata.get(i)+","+dates_Strings.get(i)+"\n");
}
value.setText("");
bw.flush();
bw.close();
} catch (IOException e2) {
e2.printStackTrace();
}//catch
}
现在,问题是当保存以下内容时:
例如,如果我输入“1”+保存,“2”+保存,“3”+保存+“4”+保存...
在文件中我可以看到
1.0 - &gt; 13年7月5日
1.0 - &gt; 13年7月5日
2.0 - &gt; 13年7月5日
3.0 - &gt; 13年7月5日
3.0 - &gt; 13年7月5日
4.0 - &gt; 13年7月5日
答案 0 :(得分:1)
您应该在文件中看到的内容更像是
1.0 -> 07/05/13
1.0 -> 07/05/13
2.0 -> 07/05/13
1.0 -> 07/05/13
2.0 -> 07/05/13
3.0 -> 07/05/13
1.0 -> 07/05/13
2.0 -> 07/05/13
3.0 -> 07/05/13
4.0 -> 07/05/13
那是因为当您将myData
写入文件时,您总是会写出整个列表,包括您之前编写过的数字。因此,第一个保存写入1.0
,第二个保存写入1.0
和2.0
,依此类推。您可以通过使用FileOutputStream
实例化fos = new FileOutputStream(file,false);
来解决此问题,然后它不会将新数据附加到文件中,而是覆盖它。或者您可以将新保存的数字单独写入具有追加模式的文件。取决于你的用例哪一个更好。
而不是
for (int i=0;i<mydata.size();i++){
bw.write(mydata.get(i)+","+dates_Strings.get(i)+"\n");
}
你写
bw.write(thedata + "," + formattedDate + "\n");
答案 1 :(得分:0)
fos = new FileOutputStream(file,true);
您正在使用追加标记来实例化FileOutputStream
。如果永远不会清除mydata
,那么每当您致电savefunc