آموزش اندروید استودیوآموزش های برنامه نویسی اندروید

آموزش برنامه نویسی اندروید با اندروید استودیو (بخش پنجاه و هشتم: خواندن از انواع فایل در دایرکتوری معین )

[vc_row][vc_column][vc_column_text]

در بخش قبلی در مورد خواندن از فایل صحبت شد. دیدیم که با استفاده از دایرکتوری معین و نام فایل text ، می توانستیم محتویات و نوشته های آن را مشاهده نماییم.

در واقع محتویات فایل، به یک متغیر رشته ای String ، تبدیل می شد و با استفاده از پیغام Toast به کاربر نمایش داده می شود.

در این قسمت هم می خواهیم ، عمل خواندن از فایل را انجام دهیم ولی اینبار می خواهیم که این کار را با استفاده از کلاس FileInputStream انجام دهیم.

با استفاده از کلاس FileInputStream می توانیم عملیات بیشتری را بر روی فایل انجام دهیم.

و حتی در برخورد با انواع فایل های مختلف، راحتتر عمل نماییم. زیرا این کلاس، فایل را به صورت بایت در می آورد.

[/vc_column_text][vc_column_text][/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

برای این کار باید کد زیر را در قسمت MainActivity.java مورد استفاده قرار دهید.

[/vc_column_text][vc_column_text]
int length = (int) file.length(); // به دست آوردن طول فایل

byte[] bytes = new byte[length]; //  تعریف متغیر آرایه ای از نوع بایت

FileInputStream in = new FileInputStream(myfile); // نام فایل است myfile
try {
    in.read(bytes); //  bytes خواندن جریان بایت های فایل و نوشتن آن بر روی متغیر
} finally {
    in.close();
}

String contents = new String(bytes); //   به متغیر رشته ای جهت نمایش byte  تبدیل متغیر
[/vc_column_text][vc_column_text]

البته فرض بر آنست که فایل به صورتی که در بخش های قبلی توضیح داده شده، تعریف شده است.

مثلا به صورت زیر:

String fileName = "1.txt";
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String pathDir = baseDir + "/Android/";

File myfile = new File(pathDir + File.separator + fileName);
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

شرح کد:

[/vc_column_text][vc_column_text][/vc_column_text][vc_column_text]

فرض می کنیم فایلی به صورتی که در تصویر مشاهده می کنید وجود دارد.

و محتویات آن به این شکل است:

[/vc_column_text][vc_column_text][/vc_column_text][vc_column_text]

پس مشخصات این فایل بدین صورت است:

      Name: 1.txt

/Directory: /Android

Content: Gsm Developers

[/vc_column_text][vc_column_text]

دقیقا مثل بخش قبلی ، نام و دایرکتوری فایل را به صورت زیر در کدجاوای پروژه مشخص می کنیم:

[/vc_column_text][vc_column_text]
String fileName = "1.txt";
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String pathDir = baseDir + "/Android/";
[/vc_column_text][vc_column_text]

در مرحله ی بعدی یک شی به نام myfile از کلاس File می سازیم و با استفاده از مسیر دایرکتوری که به برنامه گفتیم و نام فایلی که می خواهیم آن را تعریف می کنیم.

[/vc_column_text][vc_column_text]
File myfile = new File(pathDir + File.separator + fileName);
[/vc_column_text][vc_column_text]

در قسمت اول، pathDir یعنی مسیر دایرکتوری و در قسمت سوم، fileName یعنی همان نام فایل از ورودی های سازنده برای این شی می باشند.

[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

این موارد، در بخش قبلی نیز توضیح داده شد. ولی در این قسمت می خواهیم از کلاس FileInputStream که در واقع جریان ورودی فایل را می خواند استفاده نماییم.

بدین منظور در ابتدا طول فایل را به دست می آوریم:

int length = (int) myfile.length();

سپس یک متغیر آرایه ای به نام bytes از نوع byte معرفی می کنیم و تعداد خانه های آن را برابر با طول فایل در نظر می گیریم.

byte[] bytes = new byte[length];
[/vc_column_text][vc_column_text]

در مرحله ی بعدی با استفاده از کلاس FileInputStream ، جریان ورودی فایل را به بایت تبدیل کرده و در متغیر آرایه ای bytes می ریزیم.

FileInputStream in = new FileInputStream(myfile);
try {
    in.read(bytes);
} finally {
    in.close();
}

وقتی فایل شما به صورت bytes در بیاید می توانید از آن در قسمت های مختلف کد خود، استفاده نمایید. ولی به دلیل سادگی و پیوسته بودن مطالب در اینجا ما مانند بخش قبل، آن را تبدیل به رشته string می کنیم.

پس در قسمت بعدی، متغیر آرایه ای bytes را به رشته String تبدیل می کنیم تا بتوانیم با استفاده از پیغام Toast آن را به کاربر نمایش دهیم.

String contents = new String(bytes);
[/vc_column_text][vc_column_text]

در آخر با استفاده از پیغام Toast ، محتویات این رشته به کاربر نمایش داده می شود.

Toast.makeText(getApplicationContext(),contents, Toast.LENGTH_SHORT).show();
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]نکته:

در بعضی کامپایلرها مثلا Android Studio ، به دلیل آن که فایل ممکن است در حافظه موجود نباشد یا به هر دلیلی قابل خواندن نباشد، دو کد قبلی را در ساختار try-catch می نویسیم.

FileInputStream in = null;
        try {
            in = new FileInputStream(myfile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            in.read(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

برای دادن دسترسی ها باید به قسمت AndroidManifest.xml رفته و کد زیر را برای خواندن از حافظه ی خارجی بنویسیم.

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]

پروژه را Run می کنیم.

[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_text_separator title=”کد کامل MainActivity.java” i_icon_fontawesome=”fa fa-android” i_color=”green” color=”purple” border_width=”3″ add_icon=”true”][vc_column_text]

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        String fileName = "1.txt";
        String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
        String pathDir = baseDir + "/Android/";

        File myfile = new File(pathDir + File.separator + fileName);

        int length = (int) myfile.length();
        byte[] bytes = new byte[length];

        FileInputStream in = null;
        try {
            in = new FileInputStream(myfile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try {
            in.read(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        String contents = new String(bytes);
        Toast.makeText(getApplicationContext(),contents, Toast.LENGTH_SHORT).show();

    }
}
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column][vc_btn title=”بخش پنجاه و هفتم: خواندن از فایل Text در دایرکتوری معین” color=”green” i_icon_fontawesome=”fa fa-android” add_icon=”true” link=”url:http%3A%2F%2Fwww.gsm-developers.com%2Fread-from-text-file-android-studio|title:%D8%A8%D8%AE%D8%B4%20%D9%BE%D9%86%D8%AC%D8%A7%D9%87%20%D9%88%20%D9%87%D9%81%D8%AA%D9%85%3A%20%D8%AE%D9%88%D8%A7%D9%86%D8%AF%D9%86%20%D8%A7%D8%B2%20%D9%81%D8%A7%DB%8C%D9%84%20Text%20%D8%AF%D8%B1%20%D8%AF%D8%A7%DB%8C%D8%B1%DA%A9%D8%AA%D9%88%D8%B1%DB%8C%20%D9%85%D8%B9%DB%8C%D9%86||”][vc_btn title=”بخش پنجاه و نهم: نوشتن در فایل در دایرکتوری معین” color=”green” i_icon_fontawesome=”fa fa-android” add_icon=”true” link=”url:http%3A%2F%2Fwww.gsm-developers.com%2Fwrite-into-file-android-studio|title:%D8%A8%D8%AE%D8%B4%20%D9%BE%D9%86%D8%AC%D8%A7%D9%87%20%D9%88%20%D9%86%D9%87%D9%85%3A%20%D9%86%D9%88%D8%B4%D8%AA%D9%86%20%D8%AF%D8%B1%20%D9%81%D8%A7%DB%8C%D9%84%20%D8%AF%D8%B1%20%D8%AF%D8%A7%DB%8C%D8%B1%DA%A9%D8%AA%D9%88%D8%B1%DB%8C%20%D9%85%D8%B9%DB%8C%D9%86||”][vc_btn title=”در صورت ارائه سوالات و مشکلات خود به انجمن اختصاصی اندروید مراجعه نمایید” style=”classic” color=”blue” link=”url:http%3A%2F%2Fforum.gsm-developers.com|title:%D8%AF%D8%B1%20%D8%B5%D9%88%D8%B1%D8%AA%20%D8%A7%D8%B1%D8%A7%D8%A6%D9%87%20%D8%B3%D9%88%D8%A7%D9%84%D8%A7%D8%AA%20%D9%88%20%D9%85%D8%B4%DA%A9%D9%84%D8%A7%D8%AA%20%D8%AE%D9%88%D8%AF%20%D8%A8%D9%87%20%D8%A7%D9%86%D8%AC%D9%85%D9%86%20%D8%A7%D8%AE%D8%AA%D8%B5%D8%A7%D8%B5%DB%8C%20%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF%20%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D9%87%20%D9%86%D9%85%D8%A7%DB%8C%DB%8C%D8%AF||”][/vc_column][/vc_row]

Arash

طراح سایت و برنامه نویس

‫6 دیدگاه ها

  1. سلام. ممنون از آموزش های خوب شما. من یک معلم هستم و علاقمند به برنامه نویسی ! آیا امکان دارد که آموزش های شما به صورت فایل Pdf قابل دانلود شود ؟ در هر صورت ممنون از آموزش خوب شما

  2. سلام و تشکر فعلا بخش برنامه نویسی سایت معلق شده دوست عزیز

  3. سلام.ممنون از آموزش های بسیار خوب و رایگان شما
    خواهش می کنم آموزش ها رو ادامه بدید.خیلی وقته که منتظریم

  4. سلام من یه سوال داشتم می خواستم بدونم می تونم از طریق ویژوال استادیو با برنامه نویسی اندروید کار کنم

  5. سلام
    آره امکانش هست اما باید با فایلی به نام “زامارین” که زبانش #C هست کار کنی که پیشنهاد میشه با همون زبان جاوا کار کنی.
    آپدیت های اندروید استودیو این تازگیا بسیار راحت و جذاب شده
    هیچی دیگه این روزا نمیتونه جاشو بگیره.
    موفق باشی

  6. سلام کسی رو میشناسید معرفی کنید یک نرم افزار اندروید میخام برام بسازه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا