2013-09-03 2 views
0

Я пытаюсь написать идентификатор студента в текстовом файле в SD-карте. Я уже создал файл с именем students.txt в моей SD-карте.Почему файл перезаписывается в внешнем хранилище Android?

Проблема в том, что когда я пишу значение и читаю файл, я получаю только последнее значение в файле. Когда я открываю свой файл, я могу видеть только последнее значение, записанное в нем.

Что я делаю неправильно? Я пишу файл в режиме добавления, используя outputStreamWriter, но проблема остается прежней.

//function to insert 
private void myInsertFunc(String data) { 
    try { 
     File file = new File("/sdcard/" + FILENAME); 
     FileOutputStream fileOutputStream = new FileOutputStream(file); 
     OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream); 
     outputStreamWriter.append(data); 

     outputStreamWriter.close(); 
     fileOutputStream.close(); 

     Toast.makeText(getApplicationContext(), "Student ID: " + data + " Inserted Successfully!", Toast.LENGTH_SHORT).show(); 
    } 
    catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

//function to read 
private void myReadFunc() { 
    try { 
      //InputStream inputStream = openFileInput(FILENAME); 
     //InputStream inputStream = getResources().openRawResource(R.raw.student); 
     File file = new File("/sdcard/" + FILENAME); 
     FileInputStream fileInputStream = new FileInputStream(file); 

     if (fileInputStream != null) { 
      InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); 
      BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 
      String receiveString = ""; 
      while ((receiveString = bufferedReader.readLine()) != null) { 
       //if(receiveString.contains(data)) 
       //{ 
        Toast.makeText(getApplicationContext(), "Student ID: " + receiveString , Toast.LENGTH_SHORT).show(); 
        //break; 
       //} 
      } 

      bufferedReader.close(); 
      inputStreamReader.close(); 
      fileInputStream.close(); 
     } 
    } 
    catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

Попробуйте ['new FileInputStream (file, true)'] (http://developer.android.com/reference/java/io/FileOutputStream.html#FileOutputStream%28java.io.File,%20boolean%29), чтобы открыть файл в режиме добавления. –

+0

прилагается к файлу, –

+0

@ S.D. Спасибо за его работу, но теперь мне больше не нужно писать outputStreamWriter.append()? Вместо этого я пишу outputStreamWriter.write()? –

ответ

0

Что-то вроде:

File outFile = new File(Environment.getExternalStorageDirectory() ,FILENAME); 

    try { 

     FileWriter fw = new FileWriter(outFile, true); 

     try{ 
      fw.write("Hello, world!"); 
     }finally { 
      fw.close(); 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
1

У меня была такая же проблема с FileOutputStream и другие. При написании они всегда создавали новый файл. FileWriter решил это для меня. Должно выглядеть примерно так:

private void myInsertFunc(String data) { 
    //opens andor creates the file students.txt in the folder /storage/emulated/0/Android/data/<your package name>/files/ 
    File file = new File(ctxt.getExternalFilesDir(null), "students.txt"); 
    try { 
     //create a filewriter and set append modus to true 
     FileWriter fw = new FileWriter(file, true); 
     fw.append(data); 
     fw.close(); 

    } catch (IOException e) { 
     Log.w("ExternalStorage", "Error writing " + file, e); 
    } 

}

Я надеюсь, что это поможет вам.

Смежные вопросы