অ্যান্ড্রয়েডে Raw Resource থেকে টেক্সট ফাইল পড়া
অ্যান্ড্রয়েড অ্যাপে `res/raw/` ফোল্ডারে রাখা টেক্সট ফাইল (`.txt`, `.json`, `.csv` ইত্যাদি) পড়ার জন্য `openRawResource()` এবং `BufferedReader` ব্যবহার করা হয়। এই টিউটোরিয়ালে একটি টেক্সট ফাইল রিড করে TextView-এ দেখানোর পদ্ধতি দেখানো হয়েছে।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে একটি নতুন প্রজেক্ট তৈরি করুন।
ধাপ ২: Raw রিসোর্স ফোল্ডার এবং ফাইল তৈরি করুন
- Project view-এ `res` ফোল্ডারে রাইট-ক্লিক → New → Android Resource Directory
- Resource type: `raw` নির্বাচন করুন
- `res/raw/` ফোল্ডারে `sample.txt` নামে একটি ফাইল তৈরি করুন
- ফাইলে কিছু টেক্সট লিখুন (উদাহরণ: "এটি একটি নমুনা টেক্সট ফাইল। অ্যান্ড্রয়েডে raw resource থেকে পড়া হয়েছে।")
ধাপ ৩: লেআউট ফাইল (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="অ্যান্ড্রয়েডে টেক্সট ফাইল পড়া"
android:textAlignment="center"
android:textSize="18sp"
android:textStyle="bold" />
<Button
android:id="@+id/btnReadFile"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="70dp"
android:onClick="readTextFile"
android:text="টেক্সট ফাইল পড়ুন" />
<TextView
android:id="@+id/tvFileContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/btnReadFile"
android:layout_marginTop="20dp"
android:textSize="16sp"
android:textStyle="bold" />
</RelativeLayout>
ধাপ ৪: MainActivity.java - ফাইল পড়ার লজিক
package com.example.readtextfile;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class MainActivity extends AppCompatActivity {
TextView tvFileContent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvFileContent = findViewById(R.id.tvFileContent);
}
public void readTextFile(View view) {
StringBuilder stringBuilder = new StringBuilder();
try {
// Raw resource খুলুন (R.raw.sample)
InputStream inputStream = getResources().openRawResource(R.raw.sample);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line).append("\n");
}
reader.close();
inputStream.close();
// UI-তে দেখান
tvFileContent.setText(stringBuilder.toString());
// টোস্ট-ওতে দেখান
Toast.makeText(this, "ফাইল পড়া সম্পন্ন", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
tvFileContent.setText("ফাইল পড়ার সময় ত্রুটি: " + e.getMessage());
Toast.makeText(this, "ত্রুটি: " + e.getMessage(), Toast.LENGTH_LONG).show();
}
}
}
আমদানি (Import) ক্লাসগুলো
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader;
Raw Resource-এর সাথে কাজ করার টিপস
| বিষয় | বিস্তারিত |
|---|---|
| ফাইল এক্সটেনশন | .txt, .json, .csv, .xml, .html - যেকোনো টেক্সট ফরম্যাট |
| ম্যাক্স সাইজ | প্রায় ১-২ MB পর্যন্ত সুপারিশ করা হয় (APK সাইজের জন্য) |
| এনকোডিং | UTF-8 ডিফল্ট। অন্য এনকোডিং için InputStreamReader(is, "UTF-16") ব্যবহার করুন |
| রিসোর্স ID | R.raw.filename (এক্সটেনশন ছাড়া) |
বड़े ফাইল বা পারফরম্যান্সের জন্য বিকল্প
ExecutorService ব্যবহার করে ব্যাকগ্রাউন্ডে পড়া
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(() -> {
try {
InputStream is = getResources().openRawResource(R.raw.large_file);
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append("\n");
}
reader.close();
runOnUiThread(() -> tvFileContent.setText(sb.toString()));
} catch (IOException e) {
e.printStackTrace();
}
});
Scanner ব্যবহার করে (সিম্পল কেসের জন্য)
Scanner scanner = new Scanner(getResources().openRawResource(R.raw.sample));
scanner.useDelimiter("\\A"); // পুরো ফাইল একসাথে পড়া
String content = scanner.hasNext() ? scanner.next() : "";
scanner.close();
ধাপ ৫: ম্যানিফেস্ট ফাইল
সাধারণ কনফিগারেশন। কোনোพิশেষ পারমিশন দরকার নেই।
ফলাফল
অ্যাপ্লিকেশন রান করে "টেক্সট ফাইল পড়ুন" বাটনে ক্লিক করলে `res/raw/sample.txt` ফাইলের কন্টেন্ট TextView-এ প্রদর্শিত হবে।
সাধারণ সমস্যা এবং সমাধান
- FileNotFoundException: ফাইলের নাম সঠিক কিনা চেক করুন (R.raw.sample, নয় R.raw.sample.txt)
- OutOfMemoryError: বড় ফাইলের জন্য BufferedReader ব্যবহার করুন, পুরো ফাইল মেমোরিতে লোড করবেন না
- Encoding Issue: ফাইল UTF-8-এ সেভ করা হয়েছে কিনা নিশ্চিত করুন