2013-09-01 3 views
5

У меня есть google alot, читайте javadoc, а также ищите разные форумы, включая это чтение, но не нашли правильный ответ на мой вопрос. Ниже приведен фрагмент кода, но я хочу точно знать, какую функцию использовать для чтения/записи файла в android. Можно записывать во внутреннее хранилище с помощью OutputStream, FileOutputSteam.write(), Other - использовать OutputStreamWriter (FileOutputSteam) .write(), далее BufferedWriter (OutputStreamWriter) .write() и, наконец, PrintWriter.write().Какой класс и способ использовать во время чтения/записи файла во внутреннюю/внешнюю память android?

То же самое касается случая InputStream, следует ли использовать InputStream, FileInputSteam.read(), InputSreamReader (FileInputStream) .read(), BufferedReader (InputStreamReader).

Я хочу знать, какой именно лучший способ это сделать. Пожалуйста, помогите мне, как полностью смущенный этим.

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; 
} 

}

ответ

0

Все они служат цели. Есть лучший способ, потому что каждый писатель был создан по какой-то причине. Обычно все, что буферизировано, более эффективно, если вы используете mulitple read/write/flush.

Оба документа Android и Java могут быть полезны, и java docs предоставляют вам больше описания для этих авторов. Проверьте эти документы. Попробуйте читать javase6 те, которые более подробный:

Android_FileWriter

Java_FileWriter

Android_OutputStreamWriter

Java_OutputStreamWriter

Android_BufferedWriter

Java_BufferedWriter

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