¿Qué clase y método utilizar durante la lectura / escritura de un archivo en el almacenamiento interno / externo de Android?

Tengo google mucho, leer javadoc, además de buscar diferentes foros, incluyendo esta lectura del problema, pero no encontró la respuesta correcta a mi pregunta. El fragmento de código siguiente funciona bien, pero quiero saber exactamente qué función utilizar exactamente para leer / escribir el archivo en android. Se puede escribir en el almacenamiento interno utilizando OutputStream, FileOutputSteam.write (), Other es utilizar OutputStreamWriter (FileOutputSteam) .write (), BufferedWriter adicional (OutputStreamWriter) .write () y finalmente PrintWriter.write ().

Lo mismo sucede con el caso InputStream si se utiliza InputStream, FileInputSteam.read (), InputSreamReader (FileInputStream) .read (), BufferedReader (InputStreamReader).

Quiero saber cuál es exactamente la mejor manera apropiada de hacerlo. Por favor, ayúdame como totalmente confundido con esto.

public class MainActivity extends Activity { private static final String TAG = MainActivity.class.getName(); private static final String FILENAME = "students.txt"; private EditText stdId; private Button Insert; private Button Search; private Button Update; private Button Delete; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final String TAG = MainActivity.class.getName(); //output: com.fyp2.testapp.MainActivity //value used for insert/delete/search stdId = (EditText) findViewById(R.id.editTxtId); //insert value in application sandbox file Insert = (Button) findViewById(R.id.btnInsert); Insert.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { String IdToInsert = stdId.getText().toString().trim(); if(IdToInsert.length() > 0) { myInsertFunc(IdToInsert); } else { Toast.makeText(getApplicationContext(), "Id cannot be null!", Toast.LENGTH_SHORT).show(); stdId.requestFocus(); } } }); //search value from application sandbox file Search = (Button) findViewById(R.id.btnSearch); Search.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { String IdToSearch = stdId.getText().toString().trim(); if(IdToSearch.length() > 0) { mySearchFunc(IdToSearch); } else { Toast.makeText(getApplicationContext(), "Id cannot be null!", Toast.LENGTH_SHORT).show(); stdId.requestFocus(); } } }); //delete value from application sandbox file Delete = (Button) findViewById(R.id.btnDelete); Delete.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { String IdToDelete = stdId.getText().toString().trim(); if(IdToDelete.length() > 0) { myDeleteFunc(IdToDelete); } else { Toast.makeText(getApplicationContext(), "Id cannot be null!", Toast.LENGTH_SHORT).show(); stdId.requestFocus(); } } }); } //function to insert private void myInsertFunc(String data) { //If student id already exist don't write it again -> Not handled at the moment //Other exceptions may not have been handled properly try { OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput(FILENAME, Context.MODE_APPEND)); BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); bufferedWriter.append(data); bufferedWriter.newLine(); Toast.makeText(getApplicationContext(), "Student ID: " + data + " Inserted Successfully!", Toast.LENGTH_SHORT).show(); bufferedWriter.close(); outputStreamWriter.close(); } catch (IOException e) { Log.e(TAG, "File write failed: " + e.toString()); } } //function to search private void mySearchFunc(String data) { //Id id not found show toast to user -> Not handled at the moment try { InputStream inputStream = openFileInput(FILENAME); if (inputStream != null) { InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String receiveString = ""; while ((receiveString = bufferedReader.readLine()) != null) { if(receiveString.contains(data)) { Toast.makeText(getApplicationContext(), "Found Student ID: " + data , Toast.LENGTH_SHORT).show(); break; } } bufferedReader.close(); inputStream.close(); } } catch (FileNotFoundException e) { Log.e(TAG, "File not found: " + e.toString()); } catch (IOException e) { Log.e(TAG, "Can not read file: " + e.toString()); } } private void myDeleteFunc(String data) { /* I have found a solution to delete a specific line from the file. * But the problem is that it needs to scan the whole file line by line and copy the file contents that not matches the string to temp file. * This solution can reduce the effeciency. Consider search 20,000 records in a file. * Need to work around on it. */ } private void myUpdateFunc(String data) { /* Same goes to the update process... * Need to scan all records and copy content in temp file and put the updated data in that file. * Need to work around on this issue too... */ } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } 

}

Todos ellos sirven a un propósito. Hay la mejor manera apropiada, porque cada escritor fue hecho por una razón. Por lo general, todo lo que se ha almacenado en búfer es más eficiente si tiene varias lecturas / escrituras / descargas.

Tanto los documentos Android como Java pueden ser útiles y los documentos Java le ofrecen más descripción para estos escritores. Consulte esta documentación. Intente leer los javase6 que son más detallados:

Android_FileWriter

Java_FileWriter

Android_OutputStreamWriter

Java_OutputStreamWriter

Android_BufferedWriter

Java_BufferedWriter

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.