Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में SD कार्ड पर फोल्डर/फाइल लिखने की परमिशन कैसे सेट करें?

परिचय

यह ट्यूटोरियल दिखाता है कि Android में एक्सटर्नल स्टोरेज (SD कार्ड) पर फाइल पढ़ना और लिखना कैसे करें। हम रनटाइम परमिशन चेक, स्टोरेज उपलब्धता जांच, और फाइल I/O ऑपरेशन कवर करेंगे।

आवश्यक चरण

चरण 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"
    android:orientation="vertical"
    android:padding="12dp"
    tools:context=".MainActivity">

    <TextView
        android:textStyle="bold"
        android:textAlignment="center"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="एक्सटर्नल स्टोरेज पढ़ना और लिखना"
        android:textSize="24sp" />

    <EditText
        android:layout_marginTop="30dp"
        android:id="@+id/myInputText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:gravity="top|start"
        android:lines="5"
        android:minLines="3" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:orientation="horizontal"
        android:weightSum="1.0">

        <Button
            android:id="@+id/saveExternalStorage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:text="सेव करें" />

        <Button
            android:id="@+id/getExternalStorage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.5"
            android:text="पढ़ें" />

    </LinearLayout>

    <TextView
        android:layout_marginTop="10dp"
        android:id="@+id/response"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

चरण 3: मुख्य गतिविधि (src/MainActivity.java)

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class MainActivity extends AppCompatActivity {
    EditText editText;
    TextView textView;
    Button saveButton, readButton;
    File myExternalFile;
    String myData = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.myInputText);
        textView = findViewById(R.id.response);
        saveButton = findViewById(R.id.saveExternalStorage);
        readButton = findViewById(R.id.getExternalStorage);

        // सेव बटन क्लिक
        saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    FileOutputStream fos = new FileOutputStream(myExternalFile);
                    fos.write(editText.getText().toString().getBytes());
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                editText.setText("");
                textView.setText("SampleFile.txt एक्सटर्नल स्टोरेज में सेव हो गया...");
            }
        });

        // पढ़ें बटन क्लिक
        readButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    FileInputStream fis = new FileInputStream(myExternalFile);
                    DataInputStream in = new DataInputStream(fis);
                    BufferedReader br = new BufferedReader(new InputStreamReader(in));
                    String strLine;
                    myData = "";
                    while ((strLine = br.readLine()) != null) {
                        myData = myData + strLine;
                    }
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                editText.setText(myData);
                textView.setText("SampleFile.txt डेटा इंटरनल स्टोरेज से प्राप्त हुआ...");
            }
        });

        // स्टोरेज उपलब्धता जांचें
        if (!isExternalStorageAvailable() || isExternalStorageReadOnly()) {
            saveButton.setEnabled(false);
        } else {
            String fileName = "SampleFile.txt";
            String filePath = "MyFolder";
            // ऐप-स्पेसिफिक डायरेक्टरी (अनइंस्टॉल पर ऑटो-डिलीट)
            myExternalFile = new File(getExternalFilesDir(filePath), fileName);
        }
    }

    private static boolean isExternalStorageReadOnly() {
        String extStorageState = Environment.getExternalStorageState();
        return Environment.MEDIA_MOUNTED_READ_ONLY.equals(extStorageState);
    }

    private static boolean isExternalStorageAvailable() {
        String extStorageState = Environment.getExternalStorageState();
        return Environment.MEDIA_MOUNTED.equals(extStorageState);
    }
}

चरण 4: मैनिफेस्ट फ़ाइल (AndroidManifest.xml)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <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>

ऐप चलाएं

डिवाइस कनेक्ट करें, Run क्लिक करें। टेक्स्ट टाइप करें, सेव करें दबाएं, फिर पढ़ें दबाकर डेटा वापस देखें।

Android में SD कार्ड पर फोल्डर/फाइल लिखने की परमिशन कैसे सेट करें? Android में SD कार्ड पर फोल्डर/फाइल लिखने की परमिशन कैसे सेट करें?

महत्वपूर्ण नोट्स (Android 10+ के लिए)

  • Scoped Storage (Android 10+): ऐप्स को केवल अपने ऐप-स्पेसिफिक डायरेक्टरी (`getExternalFilesDir()`) का एक्सेस मिलता है। पब्लिक डायरेक्टरीज़ (Downloads, Pictures) के लिए MediaStore या Storage Access Framework उपयोग करें।
  • getExternalFilesDir() - ऐप अनइंस्टॉल होने पर फाइलें ऑटोमैटिकली डिलीट हो जाती हैं।
  • Android 11+ में `WRITE_EXTERNAL_STORAGE` का कोई प्रभाव नहीं - केवल `READ_EXTERNAL_STORAGE` और MediaStore काम करते हैं।
  • रनटाइम परमिशन रिक्वेस्ट (`ActivityCompat.requestPermissions`) जोड़ें Android 6.0+ के लिए।
  1. एंड्रॉइड में प्रोग्रामेटिक रूप से फोन नंबर कैसे प्राप्त करें? एंड्रॉइड में प्रोग्रामेटिक रूप से फोन नंबर कैसे प्राप्त करें?

    TelephonyManager से फोन नंबर पढ़ना (परमिशन के साथ) यह उदाहरण दर्शाता है कि TelephonyManager.getLine1Number() का उपयोग करके डिवाइस का फोन नंबर कैसे प्राप्त करें और रनटाइम परमिशन कैसे संभालें। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनें। चरण 2: लेआउट में TextView res/layou

  1. एंड्रॉइड में एसेट्स फोल्डर में फाइल कैसे लिखें? एंड्रॉइड में एसेट्स फोल्डर में फाइल कैसे लिखें?

    एसेट्स फोल्डर से फाइल पढ़ना (केवल पढ़ने योग्य) महत्वपूर्ण: एंड्रॉइड में एसेट्स फोल्डर केवल पढ़ने योग्य (read-only) होता है। आप रनटाइम पर इसमें फाइल नहीं लिख सकते। यह उदाहरण एसेट्स से फाइल पढ़ने का सही तरीका दिखाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनें। चरण 2: ल

  1. एंड्रॉइड में TextView स्पैन का कलर कैसे सेट करें? एंड्रॉइड में TextView स्पैन का कलर कैसे सेट करें?

    SpannableString और ForegroundColorSpan के साथ आंशिक टेक्स्ट कलरिंग यह उदाहरण दर्शाता है कि SpannableString का उपयोग करके TextView के विशिष्ट भागों का टेक्स्ट कलर कैसे बदलें। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनें। चरण 2: लेआउट में TextView res/layout/activity_main.x