Android इंटरनल स्टोरेज में फ़ाइल ऑपरेशन
Android ऐप्स इंटरनल स्टोरेज (/data/data/<package>/files/) में प्राइवेट फ़ाइलें बना सकते हैं। यह उदाहरण दर्शाता है कि ArrayList को टेक्स्ट फ़ाइल में कैसे सेव करें और वापस पढ़ें।
उदाहरण: लिस्ट को टेक्स्ट फ़ाइल में सेव और रीड करना
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project चुनें।
चरण 2: लेआउट फ़ाइल (res/layout/activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
tools:context=".MainActivity"
android:orientation="vertical">
<EditText
android:id="@+id/enterText"
android:hint="यहां टेक्स्ट दर्ज करें"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/save"
android:text="सेव"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/output"
android:layout_width="wrap_content"
android:textSize="25sp"
android:layout_height="wrap_content" />
</LinearLayout>
चरण 3: MainActivity.java
package com.example.textfilestorage;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
Button save;
ArrayList list = new ArrayList<>();
TextView output;
EditText enterText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
output = findViewById(R.id.output);
enterText = findViewById(R.id.enterText);
save = findViewById(R.id.save);
// ऐप शुरू होने पर मौजूदा डेटा लोड करें
output.setText(readFile());
save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String text = enterText.getText().toString().trim();
if (!text.isEmpty()) {
saveToFile(text);
output.setText(readFile());
enterText.setText("");
Toast.makeText(MainActivity.this, "टेक्स्ट सेव किया गया", Toast.LENGTH_LONG).show();
}
}
});
}
private void saveToFile(String text) {
try {
// इंटरनल स्टोरेज में 'text' डायरेक्टरी बनाएं
File dir = new File(getFilesDir(), "text");
if (!dir.exists()) {
dir.mkdir();
}
// sample.txt फ़ाइल में लिखें (ऐपेंड मोड)
File file = new File(dir, "sample.txt");
FileWriter writer = new FileWriter(file, true); // true = append mode
writer.append(text).append("\n");
writer.flush();
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private String readFile() {
File file = new File(getFilesDir(), "text/sample.txt");
StringBuilder text = new StringBuilder();
list.clear();
try {
if (file.exists()) {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
list.add(line);
text.append(line).append("\n");
}
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return text.toString();
}
}
चरण 4: AndroidManifest.xml में परमिशन
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.example.textfilestorage">
<!-- इंटरनल स्टोरेज के लिए परमिशन की आवश्यकता नहीं होती -->
<!-- ये परमिशन एक्सटर्नल स्टोरेज के लिए हैं -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
नोट: इंटरनल स्टोरेज के लिए परमिशन नहीं चाहिए
getFilesDir() इंटरनल स्टोरेज का उपयोग करता है जो ऐप के लिए प्राइवेट होता है। इसके लिए WRITE_EXTERNAL_STORAGE या READ_EXTERNAL_STORAGE परमिशन की आवश्यकता नहीं होती। मैनिफेस्ट में ये परमिशन केवल एक्सटर्नल स्टोरेज (SD कार्ड) के लिए जरूरी हैं।
ऐप चलाएं
ऐप लॉन्च करें, टेक्स्ट दर्ज करें, सेव दबाएं। टेक्स्ट फ़ाइल में जुड़ जाएगा और टेक्स्टव्यू में दिखेगा। फ़ाइल पथ: /data/data/com.example.textfilestorage/files/text/sample.txt
मूल कोड में समस्याएं और सुधार
- ओवरराइट नहीं ऐपेंड: मूल कोड
FileWriter(file)उपयोग करता था जो फ़ाइल ओवरराइट करता है। सुधार:FileWriter(file, true)ऐपेंड मोड के लिए - लिस्ट डुप्लीकेशन: हर रीड पर लिस्ट में आइटम जुड़ते जाते थे। सुधार:
list.clear()रीड से पहले - Arrays.toString गलत:
Arrays.toString(new ArrayList[]{list})गलत आउटपुट देता था। सुधार: StringBuilder से सीधा स्ट्रिंग - खाली कैच ब्लॉक: एक्सेप्शन प्रिंट करें कम से कम
मुख्य बिंदु
getFilesDir()इंटरनल स्टोरेज पथ देता हैFileWriter(file, true)ऐपेंड मोड में खोलता हैBufferedReaderलाइन-दर-लाइन पढ़ने के लिए कुशल- इंटरनल स्टोरेज ऐप अनइंस्टॉल होने पर क्लियर हो जाता है
- बड़े डेटा के लिए SQLite या Room डेटाबेस बेहतर