保存在文件中会导致许多变量实例

时间:2013-05-07 09:13:18

标签: android

我正在使用以下功能来保存一些数据。 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日

2 个答案:

答案 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.02.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

时,其有效内容都会写入文件中