English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Подробное описание операций с файлами в Android
Операции с файлами в Android на самом деле это обработка операций с файлами в Java. Таким образом, если вы хорошо знакомы с операциями с файлами io в Java, операции с файлами в Android будут для вас легким делом. Хорошо, не будем терять время, перейдем к сегодняшней теме.
Начнем с маленького проекта
Сначала это файл布局, это довольно просто, давайте перейдем direkt к коду.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="文件名称" /> <EditText android:id="@+id/et_filename" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="file name" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="文件内容" /> <EditText android:id="@+id/et_filecontent" android:layout_width="match_parent" android:layout_height="wrap_content" android:lines="7" android:hint="file content" /> <Button android:id="@+id/btn_save" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="toSave" android:text="Save" /> <Button android:id="@+id/btn_get" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="getFile" android:text="Get" /> </LinearLayout>
Затем наш файл основного интерфейса Java. Продолжаем код.
package com.mark.storage; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.mark.service.FileService; public class MainActivity extends Activity { private EditText mEt_filename, mEt_filecontent; private Button mBtn_save; private void init(){ mEt_filecontent = (EditText) findViewById(R.id.et_filecontent); mEt_filename = (EditText) findViewById(R.id.et_filename); mBtn_save = (Button) findViewById(R.id.btn_save); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } /** * Сохранить данные в файл * @param view */ public void toSave(View view) { String fileName = mEt_filename.getText().toString(); String fileContent = mEt_filecontent.getText().toString(); FileService service = new FileService(getApplicationContext()); boolean isSucceed = service.save(fileName, fileContent); if(isSucceed){ Toast.makeText(getApplicationContext(), "Поздравляем, вы успешно保存ли файл!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(), "Извините, вы не удалось сохранить файл!", Toast.LENGTH_SHORT).show(); } } public void getFile(View view){ String fileName = mEt_filename.getText().toString(); FileService service = new FileService(getApplicationContext()); String fileContent = service.getFile(fileName); if(fileContent != null || !fileContent.equals("")) { mEt_filecontent.setText(fileContent); } else { Toast.makeText(getApplicationContext(), "Извините, чтение файла не удалось!", Toast.LENGTH_SHORT).show(); } } }
Не кажется ли вам, что код внутри странен? Что такое FileService?
Фактически, FileService - это наш бизнес-класс, который主要负责帮助我们 выполнять операции по сохранению и чтению файлов. Ниже приведен код
package com.mark.service; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import android.content.Context; public class FileService { //Это класс, предоставляемый Android, для быстрого получения потока вывода файла, внимание: параметром не может быть путь, а только имя файла private Context mContext; public FileService(Context context) { this.mContext = context; } /** * Метод для сохранения файла * @param fileName * @param fileContent * @return */ public boolean save(String fileName, String fileContent) { try { //Если используется режим Context.MODE_PRIVATE, то разрешается доступ только этому приложению к файлу, и данные добавляются в覆盖ном режиме FileOutputStream fos = mContext.openFileOutput(fileName, Context.MODE_PRIVATE); fos.write(fileContent.getBytes()); fos.close(); return true; } catch (Exception e) { e.printStackTrace(); return false; } } /** * Получить детальную информацию о сохраненных ранее файлах * @param fileName * @return */ public String getFile(String fileName) { String fileContent = ""; try{ FileInputStream fis = mContext.openFileInput(fileName); byte[] buf = new byte[1024]; int len; ByteArrayOutputStream bais = new ByteArrayOutputStream(); while((len = fis.read(buf))!= -1){ bais.write(buf, 0, len); } byte[] data = bais.toByteArray(); fileContent = new String(data); fis.close(); return fileContent; } e.printStackTrace(); return "Извините, чтение файла失败!"; } } }
Анализ бизнес-класса
Теперь перейдем к делу. Ядро этого проекта заключается в этом бизнес-классе, по следующим причинам:
Ядро
Идея уровней, классы с различными функциями размещаются в различных пакетах, что упрощает отладку программы и обслуживание кода в будущем.
Спасибо за чтение, надеюсь, это поможет вам, спасибо за поддержку нашего сайта!