অ্যান্ড্রয়েড ডিরেক্টরিতে ফাইলগুলি কীভাবে তালিকাভুক্ত করা যায়?


120

এখন পর্যন্ত আমার কোডটি এখানে:

String path = Environment.getExternalStorageDirectory().toString()+"/Pictures";

        AssetManager mgr = getAssets();

        try {

            String list[] = mgr.list(path);
            Log.e("FILES", String.valueOf(list.length));

            if (list != null)
                for (int i=0; i<list.length; ++i)
                    {
                        Log.e("FILE:", path +"/"+ list[i]);
                    }

        } catch (IOException e) {
            Log.v("List error:", "can't list" + path);
        }

তবুও আমার কাছে সেই দির ফাইল রয়েছে, এটি আমাকে তালিকাভুক্ত করে = 0 ... কোনও ধারণা?

উত্তর:


328

ফাইলগুলি অ্যাক্সেস করার জন্য, ম্যানিফেস্ট ফাইলটিতে অনুমতিগুলি অবশ্যই দিতে হবে।

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

এটা চেষ্টা কর:

String path = Environment.getExternalStorageDirectory().toString()+"/Pictures";
Log.d("Files", "Path: " + path);
File directory = new File(path);
File[] files = directory.listFiles();
Log.d("Files", "Size: "+ files.length);
for (int i = 0; i < files.length; i++)
{
    Log.d("Files", "FileName:" + files[i].getName());
}

7
ধন্যবাদ ইউরি, আশ্চর্যরূপে ফাইল. দৈর্ঘ্য একটি নালপয়েন্টার এক্সসেপশন দেয় ... কোনও ধারণা? Spasibo!
রজার ট্রাভিস

8
আমি মনে করি যে নির্দিষ্ট ফোল্ডারে আপনার কাছে ফাইল নেই। নাল জন্য ফাইল [] পরীক্ষা করার চেষ্টা করুন। যদি এটি নাল হয় তবে আপনার কোনও ফলাফল নেই এবং ফাইল.সাময়ের ব্যতিক্রম ঘটায়।
ইয়ুরি

4
মনে হচ্ছে এটি স্রেফ একটি "/" অনুপস্থিত ছিল :) ধন্যবাদ!
রজার ট্র্যাভিস

1
মোহন মত কাজ! আমার মোবাইলটি মোটো জি 4, অ্যান্ড্রয়েড এন । কেউ যদি মুখোমুখি হন can't play video error। আপনি settings --> apps --> your app --> permissions --> enable storage. যদি এই ত্রুটির মুখোমুখি হন তবে আপনাকে নিজের মোবাইলে যেতে হবে man <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />আপনার ম্যানিফেস্টে নিশ্চিত হয়ে নিন । যে সমস্ত লোকেরা মুখোমুখি রয়েছেন NullPointerException- আপনি অ্যাপটির অভ্যন্তরীণ স্টোরেজটিতে থাকা ফাইলগুলিতে অ্যাক্সেস করার চেষ্টা করছেন যা ব্যক্তিগত যা আপনি দুঃখিত এটি করতে পারবেন না।
কোডারপিসি

ফাইললিস্টের মতো কিছু আছে ()। পরিষ্কার () ;? , তাই আমি এই পদ্ধতিটি পুনরায় ব্যবহার করতে পারি
user55924

44

আমি সবেমাত্র এটি আবিষ্কার করেছি:

new File("/sdcard/").listFiles() আপনার কাছে না থাকলে শূন্য দেয়:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

আপনার AndroidManLive.xML ফাইলটিতে সেট করুন।


6
আমি জানি এটি সত্য, কিন্তু ... এটি কি একটি উত্তর? বা একটি মন্তব্য করা উচিত?
জোয়াকুইন ইরচুক

7
এছাড়াও, অ্যান্ড্রয়েড 6.0+ এ সেটিংস-> অ্যাপ্লিকেশন-> আপনার অ্যাপ্লিকেশন-> অনুমতিগুলিতে অনুমতি দেওয়া দরকার।
ভিটি

1
ডিরেক্টরি খালি থাকলে এটিও
নালাগুলি

11

ভাল, আপনার APK ফাইলের ভিতরে AssetManagerথাকা assetsফোল্ডারের মধ্যে থাকা ফাইলগুলি তালিকাভুক্ত করে । সুতরাং আপনি উপরের উদাহরণে যা যা তালিকাভুক্ত করার চেষ্টা করছেন তা হ'ল [এপিকে] / সম্পদ / এসডিকার্ড / ছবি।

আপনি যদি assetsনিজের অ্যাপ্লিকেশনটির ফোল্ডারের মধ্যে কিছু ছবি রেখে থাকেন এবং সেগুলি Picturesডিরেক্টরিতে থাকে তবে আপনি তা করতে পারেন mgr.list("/Pictures/")

অন্যদিকে, Picturesফোল্ডারে যদি আপনার APK ফাইলের বাইরে থাকা এসডকার্ডে ফাইল থাকে তবে আপনি Fileসেভাবে ব্যবহার করতে পারেন :

File file = new File(Environment.getExternalStorageDirectory(), "Pictures");
File[] pictures = file.listFiles();
...
for (...)
{
log.e("FILE:", pictures[i].getAbsolutePath());
}

এবং ডক্স থেকে প্রাসঙ্গিক লিঙ্ক:
ফাইল
সম্পদ পরিচালক


"ফাইল [] ছবিগুলি = ফাইল.লিস্ট ফাইল ();" চেষ্টা করেছিলেন, তবে এটি একটি নালপয়েন্ট এক্সপ্লেশন দেয় ... হুম ...
রজার ট্র্যাভিস

1
মনে হচ্ছে এটি স্রেফ একটি "/" অনুপস্থিত ছিল :) ধন্যবাদ!
রজার ট্র্যাভিস

1
আমার দিন বাঁচানোর জন্য ধন্যবাদ :)
সৈয়দ নাজার মুহাম্মদ

@ সাইয়েদনাজার মুহাম্মদ হা। আমার বন্ধুকে বাঁচানোর জন্য আপনাকে ধন্যবাদ। সর্বদা একটি ইতিবাচক মন্তব্য উপভোগ করুন: ডি
রিড

11

উপরের সমস্ত উত্তর ছাড়াও:

আপনি যদি অ্যান্ড্রয়েড 6.0+ এ (এপিআই স্তর 23+) থাকেন তবে আপনাকে বাহ্যিক স্টোরেজ অ্যাক্সেসের জন্য স্পষ্টভাবে অনুমতি চাইতে হবে permission সহজভাবে হচ্ছে

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

আপনার ম্যানিফেস্টে যথেষ্ট হবে না। আপনি সক্রিয়ভাবে আপনার ক্রিয়াকলাপে অনুমতিটির জন্য অনুরোধ করেছেন:

//check for permission
if(ContextCompat.checkSelfPermission(this,
            Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED){
    //ask for permission
    requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, READ_EXTERNAL_STORAGE_PERMISSION_CODE);
}

আমি এটি পড়ার পরামর্শ দিচ্ছি: http://developer.android.com/training/permission/requesting.html#perm-request


2

আপনার pathসম্পদ ফোল্ডারের মধ্যে নেই। হয় আপনি সম্পদ ফোল্ডারের মধ্যে ফাইলগুলি গণনার মাধ্যমে AssetManager.list()বা আপনার এসডি কার্ডের মাধ্যমে ফাইলগুলি গণনা করেFile.list()


1
String[] listOfFiles = getActivity().getFilesDir().list();

অথবা

String[] listOfFiles = Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS).list();

1

এটা চেষ্টা কর:

public class GetAllFilesInDirectory {

public static void main(String[] args) throws IOException {

    File dir = new File("dir");

    System.out.println("Getting all files in " + dir.getCanonicalPath() + " including those in subdirectories");
    List<File> files = (List<File>) FileUtils.listFiles(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
    for (File file : files) {
        System.out.println("file: " + file.getCanonicalPath());
    }

}

}

1

দুটি জিনিস ঘটতে পারে:

  • আপনি READ_EXTERNAL_STORAGEআপনার অনুমতি যোগ করছেন নাAndroidManifest.xml
  • আপনি অ্যান্ড্রয়েড 23 কে টার্গেট করছেন এবং আপনি ব্যবহারকারীর কাছে সেই অনুমতি চাইছেন না। অ্যানড্রয়েড 22 এ যান বা ব্যবহারকারীকে সেই অনুমতিটির জন্য জিজ্ঞাসা করুন।

0

এগুলি চেষ্টা করে দেখুন

 String appDirectoryName = getResources().getString(R.string.app_name);
    File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + getResources().getString(R.string.app_name));
    directory.mkdirs();
    File[] fList = directory.listFiles();
    int a = 1;
    for (int x = 0; x < fList.length; x++) {

        //txt.setText("You Have Capture " + String.valueOf(a) + " Photos");
        a++;
    }
    //get all the files from a directory
    for (File file : fList) {
        if (file.isFile()) {
            list.add(new ModelClass(file.getName(), file.getAbsolutePath()));
        }
    }

0

আপনি যদি অ্যান্ড্রয়েড 10 / কিউ তে থাকেন এবং আপনি বাহ্যিক স্টোরেজটি পড়ার জন্য অ্যাক্সেস অনুমতিগুলির অনুরোধ করার জন্য সমস্ত সঠিক কাজটি করেছেন এবং এটি এখনও কার্যকর হয় না, এই উত্তরটি পড়া ভাল:

অ্যান্ড্রয়েড কিউ (10) সমস্ত স্টোরেজ অ্যাক্সেস পেতে অনুমতি চাইতে। স্কোপড স্টোরেজ

আমার কাছে ওয়ার্কিং কোড ছিল, তবে আমার ডিভাইসটি নেটওয়ার্ক সংযোগে থাকা অবস্থায় এটি আপডেট করার জন্য নিজেই তা গ্রহণ করেছিল (এটি সাধারণত কোনও সংযোগ ছাড়াই ছিল)) অ্যান্ড্রয়েড 10-এ একবার, ফাইল অ্যাক্সেস আর কাজ করে না। কোডটি পুনর্লিখন না করে এটিকে ঠিক করার একমাত্র সহজ উপায় হ'ল বর্ণিত হিসাবে ম্যানিফেস্টে সেই অতিরিক্ত বৈশিষ্ট্য যুক্ত করা। ফাইল অ্যাক্সেস এখন অ্যান্ড্রয়েড 9 এর মতো আবার কাজ করে। ওয়াইএমএমভি, এটি সম্ভবত ভবিষ্যতের সংস্করণগুলিতে কাজ করা চালিয়ে যাবে না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.