Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีดึงข้อมูล Data Directory ของระบบใน Android

บทนำ

ตัวอย่างนี้สาธิตวิธีดึงข้อมูลไดเรกทอรีข้อมูลของระบบ (System Data Directory) โดยใช้ Environment.getDataDirectory() ซึ่งเป็นเส้นทางที่แอปพลิเคชันเก็บข้อมูลส่วนตัว (Internal Storage)

ขั้นตอนที่ 1: สร้างโปรเจกต์

Android Studio → File → New Project → Empty Activity

ขั้นตอนที่ 2: Layout (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:app="https://schemas.android.com/apk/res-auto"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="30sp" />

</LinearLayout>

ขั้นตอนที่ 3: โค้ดหลัก (MainActivity.java)

package com.example.myapplication;

import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView textView;

    @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.text);

        // ดึงชื่อโฟลเดอร์ Data Directory (เช่น "data")
        textView.setText(Environment.getDataDirectory().getName());
        
        // หรือดึง Full Path
        // textView.setText(Environment.getDataDirectory().getAbsolutePath());
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }
}

ผลลัพธ์

วิธีดึงข้อมูล Data Directory ของระบบใน Android

Environment Directory Methods สำคัญ

เมธอด คืนค่า คำอธิบาย ตัวอย่าง
getDataDirectory()FileSystem Data Directory (/data)/data
getRootDirectory()FileSystem Root Directory (/system)/system
getExternalStorageDirectory()FilePrimary Shared Storage (Deprecated API 29+)/storage/emulated/0
getDownloadCacheDirectory()FileCache Directory สำหรับ Download (Deprecated)/cache

ไดเรกทอรีที่เกี่ยวข้องกับแอป (App-Specific)

แทนที่จะใช้ Environment โดยตรง ควรใช้ Context Methods:

เมธอด (Context) เส้นทาง ใช้สำหรับ
getFilesDir()/data/data/pkg/filesไฟล์ส่วนตัวของแอป (Private)
getCacheDir()/data/data/pkg/cacheCache ไฟล์ชั่วคราว (ระบบอาจลบ)
getExternalFilesDir()/storage/emulated/0/Android/data/pkg/filesไฟล์บน Shared Storage (App-specific)
getExternalCacheDir()/storage/emulated/0/Android/data/pkg/cacheCache บน Shared Storage

หมายเหตุสำคัญ (Scoped Storage - Android 10+)

  • getExternalStorageDirectory() ถูก Deprecated ตั้งแต่ API 29
  • แอปเข้าถึงได้เฉพาะ App-Specific Directory (ไม่ต้องขอ Permission)
  • เข้าถึงไฟล์ของแอปอื่น ต้องใช้ MediaStore หรือ Storage Access Framework
  • ใช้ context.getExternalFilesDir(null) แทนสำหรับไฟล์ที่ผู้ใช้ควรเข้าถึงได้

โค้ดแนะนำ (Context-based)

// Internal Storage (Private)
File filesDir = getFilesDir(); // /data/data/com.example.myapplication/files
File cacheDir = getCacheDir(); // /data/data/com.example.myapplication/cache

// External Storage (App-specific, No Permission needed)
File extFilesDir = getExternalFilesDir(null); // /storage/emulated/0/Android/data/com.example.myapplication/files
File extCacheDir = getExternalCacheDir();