0

我正在使用以下功能来保存一些数据。mydata 是用户输入的双列表,而 dates_Strings 是列表(以字符串为数据类型),其中包含字符串格式的日期。

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 -> 2013 年 7 月 5 日

1.0 -> 2013 年 7 月 5 日

2.0 -> 2013 年 7 月 5 日

3.0 -> 2013 年 7 月 5 日

3.0 -> 2013 年 7 月 5 日

4.0 -> 2013 年 7 月 5 日

4

2 回答 2

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依此类推。您可以通过实例化您的FileOutputStreamwith来解决此问题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");
于 2013-05-07T09:36:52.170 回答
0
  fos = new FileOutputStream(file,true);

FileOutputStream您正在使用附加标志进行实例化。如果mydata从不清除,则每次调用时都会将其内容写入文件savefunc

于 2013-05-07T09:29:42.333 回答