0

ユーザーが入力したデータである二重リスト (mydata) と現在の日付である文字列リスト (dates_Strings) をファイルに保存しています。

ユーザーがデータを入力して「保存」ボタンを押すと、データと現在の日付が保存されます。

したがって、ユーザーは「1」を入力して保存を押すことができます (1, 08/05/13)

「2」と入力して保存を押します (2, 08/05/13)。

ユーザーは 1 日 (同じ日付) にデータを入力する可能性があるため、日付の多くのインスタンスを保存したくありません。その日付のすべてのユーザー データを保存したいと考えています。

私は次のように試しました:

 for (int i=1;i<mydata.size();i++){

                  bw.write(mydata.get(i)+",");
            while (!(dates_Strings.get(i).equals(dates_Strings.get(i-1))))            
                       bw.write(dates_Strings.get(i)+"\n");
              }

ただし、最後に入力したデータのみが保存されます。

私は次のように保存しています:

File sdCard = Environment.getExternalStorageDirectory();
        File directory = new File (sdCard, "MyFiles");
        directory.mkdirs();            
        File file = new File(directory, filename);

        FileOutputStream fos;

        //saving them
        try {
           fos = new FileOutputStream(file,true); //true in order to append

              BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fos));

              for (int i=1;i<mydata.size();i++){

                    //if (!(dates_Strings.get(i).equals(dates_Strings.get(i-1))))             
                         bw.write(mydata.get(i)+","+dates_Strings.get(i)+"\n");
              }
              value.setText("");
              bw.flush();
              bw.close();

            } catch (IOException e2) {
               e2.printStackTrace();
                }//catch
    }

私は次のようにロードしています:

 File sdCard = Environment.getExternalStorageDirectory();
    File directory = new File (sdCard, "MyFiles");
    File file = new File(directory, filename);

    String s;

    FileInputStream fis;

   try {
      fis = new FileInputStream(file);

         BufferedReader br = new BufferedReader(new InputStreamReader(fis));

         do {
             s = br.readLine();     
             if (s != null ){
                 String[] splitLine = s.split(",");
                 mydata.add(Double.parseDouble(splitLine[0]));
                 //dates_Strings.add(thedate.parse(splitLine[1]));
                 dates_Strings.add(splitLine[1]);
       }                        
             } while (s != null );
          br.close();                      
       } catch (IOException e) {
          e.printStackTrace();
           }
}
4

2 に答える 2

0

うーん...多分これはあなたを助けることができます、私たちの同僚が述べた基本的な考え方:入力を受け取り、ファイルに保存し、新しい入力を受け取り、既存のファイルを以前に読み取り、新しいコンテンツを古いコンテンツに追加し、更新されたコンテンツを保存しますあなたのファイル。

//Asumming your values are these:
        List<String> datesList = new ArrayList<String>();
        List<Double> dataList = new ArrayList<Double>();
        //You must fill your data of course...
        //I use a buffer to put in order my data

        StringBuffer stringAppender = new StringBuffer();       
        for (int i = 0; i < dataList.size(); i++) {
            stringAppender.append(dataList.get(i));
            stringAppender.append(",");
            stringAppender.append(datesList.get(i));
            if (i != dataList.size()-1) {
                stringAppender.append("\n");
            }
        }
        //I use the Buffered Writer and then save all the data ordered in one single String.
        BufferedWriter bw = new BufferedWriter(new FileWriter(new File("/home/mtataje/saved.txt")));        
        bw.write(stringAppender.toString());
        bw.close();

それから...新しい入力がありますよね?

        //I read my file first
    BufferedReader br = new BufferedReader(new FileReader(new File("/home/mtataje/saved.txt")));
    String line;

    StringBuffer auxBuffer = new StringBuffer();

    while ((line = br.readLine()) != null) {
        auxBuffer.append(line);
        auxBuffer.append("\n");
    }

    //Then append to the StringBuffer again, but your StringBuffer has data saved inside :)
    for (int i = 0; i < newDataListIncoming.size(); i++) {
        auxBuffer.append(newDataListIncoming.get(i));
        auxBuffer.append(",");
        auxBuffer.append(newDatesIncoming.get(i));
        if (i != newDataListIncoming.size()-1) {
            auxBuffer.append("\n");
        }
    }
    //And write your file
    BufferedWriter bw2 = new BufferedWriter(new FileWriter(new File("/home/mtataje/saved.txt")));       
    bw2.write(auxBuffer.toString());
    bw2.close();

もちろん、あなたはメソッドを使用し、私のようにコードに冗長性を使用しません。よろしくお願いします。

于 2013-05-08T16:43:48.040 に答える