English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Android ファイル操作の詳細
Androidのファイル操作は、要するにJavaのファイル操作の処理です。したがって、Javaのioファイル操作に詳しい場合は、Androidのファイル操作は小さな問題です。それでは、話は長くなるので、今日の主題に入りましょう。
まずは小さなプロジェクトから始めてみましょう。
まずはレイアウトファイルから始めます。これは比較的単純なので、直接コードを示します。
<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 "ファイル読み込みに失敗しました!"; } } }
ビジネスクラスの分析
ここでは本題に入りましょう。この小さなプロジェクトのコアはこのビジネスクラスにあります。その理由は以下の通りです:
コア
レイヤリングの考え方、異なる機能のクラスを異なるパッケージに配置することで、プログラムのデバッグが簡単になり、将来的なコードのメンテナンスも容易になります。
読んでいただきありがとうございます。皆様のサポートに感謝します!