English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

شرح عمليات ملفات Android وشرح الشيفرة المثال البسيط

 توضيح عملية ملفات أندرويد

توضيح عملية ملفات أندرويد في الواقع هو عملية معالجة ملفات Java. لذا إذا كنت تعرف عملية ملفات IO في Java جيدًا، فإن عملية ملفات أندرويد ستكون سهلة جدًا. حسنًا، لن نطيل، دعونا نبدأ في موضوع اليوم.

دعونا نبدأ بمشروع صغير

أولاً، هذا هو ملف التخطيط، وهو بسيط جدًا، لذا دعونا نبدأ بالكود مباشرةً.

<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 {
  // فئة FileOutputStream من الأندرويد التي يمكنها الحصول على تيار النسخ المباشر بسرعة، يرجى ملاحظة أن المعامل لا يجب أن يكون مسارًا، بل يجب أن يكون اسم الملف فقط
  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 "أعتذر، فشل في قراءة الملف!";
    }
  }
}

تحليل الكلاس الأعمال

الآن دعونا نبدأ في الموضوع الأساسي. يكمن الجوهر لهذا المشروع الصغير في هذا كلاس الأعمال، السبب في ذلك هو:

  1. السياق: كلاس السياق المدمج في Android، يسهل الحصول على كائن تدفق الملف.
  2. في طريقة قراءة الملف، تم استخدام كلاس ByteArrayOutputStream، وهو أمر مهم، لأن استخدام النصوص فقط لقراءة الملفات المحفوظة قد يؤدي إلى عدم ظهور البيانات المستهدفة بسبب مشاكل التسلسل.
  3. استخدام القيم المعدة ل“التبليغ”نتيجة العمليات، مما يسهل تقديم واجهة مستخدم ودية وتجربة استعمال.

النواة

الفكرة المتدرجة، وضع الفئات المختلفة للوظائف في حزم مختلفة، مما يسهل调试 البرنامج وييسر صيانة الكود في المستقبل.

شكرًا على القراءة، آمل أن تساعدكم، شكرًا لدعمكم لموقعنا!

أعجبك هذا