آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

دسترسی به نام تمام فایل های داخل SDCard

احسان منصوری  11 سال پیش  11 سال پیش
+2 0

سلام دوستان

من کد زیر رو برای دسترسی به نام تمام فایل های داخل SDCard نوشتم اما نمیدونم چرا بجای نمایش نام فایل با پسوندش، آخرین پوشه قبل از فایل رو نمایش میده و در آرایه ذخیره میکنه. نکته عجیبش اینجاس که وقتی اسم پوشه ی خاصی رو بهش میدم، لیست همه فایل های داخلش رو نمایش میده ولی من میخوام آدرس اصلی SDCard رو بهش بدم که لیست تمام فایل ها رو نمایش بده که نمایش نمیده:

آدرس مسیر اصلی:

 dir = Environment.getExternalStorageDirectory().toString();

اینم کد:

     private void getDir(String dirPath) {
        item = new ArrayList<String>();
        path = new ArrayList<String>();
        File f = new File(dirPath);
        File[] files = f.listFiles();

        for (int i = 0; i < files.length; i++) {
            File file = files[i];

            if (!file.isHidden() && file.canRead()) {
                path.add(file.getPath());
                if (file.isFile()) {
                    item.add(file.getName());
                } else {
                    item.add(file.getName());
                }
            }
        }
        Log.i("LOG", "FILE_NAME: " + item);
        Log.i("LOG", "FILE_PATH: " + path);

    }
 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
hamidd  11 سال پیش
+5 0

سلام آقای منصوری عزیز. می تونید با نوشتن یک تابع بازگشتی این کار رو انجام بدید. بدون نیاز به استفاده از آرایه ها و یک الگوریتم بهینه تر و خوب تر . با یک حلقه ی for زیر پوشه ها رو iterate کنید و به تمام فایل های زیر پوشه ها رو مرور کنید و عملیات مورد نظر رو (مثلا تغییر نام فایلها) انجام بدید.
از این کد میتونید استفاده کنید. یه پوشه رو بهش میدید (میتونید آدرس sdcard رو بدید تا تمام فایل های sdcard رو مرور کنه) و تمام فایل های sdcard رو مرور می کنید.

 public void walk( String path ) {

File root = new File( path );
File[] list = root.listFiles();

if (list == null) return;

for ( File f : list ) {
if ( f.isDirectory() ) {
walk( f.getAbsolutePath() );
Log.i("LOG", "DIR" + f.getAbsoluteFile());
}
else {
// do your work here
Log.i("LOG", "File:" + f.getAbsoluteFile());
String s1 = f
.getAbsoluteFile()
.getName()
.substring(
0,
f.getAbsoluteFile().getName().lastIndexOf("."));

String s2 = f
.getAbsoluteFile()
.getName()
.substring(
f.getAbsoluteFile().getName().lastIndexOf(".") + 1,
f.getAbsoluteFile().getName().length());

File file = new File(f.getAbsoluteFile().getPath());
File file2 = new File(f.getAbsoluteFile().getParent() + "/."
+ s1 + "#" + s2);
boolean success = file.renameTo(file2);
}
}
}

اونجایی که نوشتم do your work here عملیات مورد نظر مانند تغییر نام فایل ها رو انجام بدید. یعنی اونجا f.getAbsoluteFile() نام فایل رو بهتون میده باید همون جا نام فایل رو با f.getAbsoluteFile() بگیرید و تغییر نام اش بدید یا هر کار دیگه ای دوست داشتید انجام بدید.

این طوری توی Oncreate یا هر جای دیگه تابع رو فراخوانی کنید .

 walk(Environment.getExternalStorageDirectory().getPath() + "/");

همچنین بهتره کد رو توی Thread بذارید تا گوشی هنگ نکند و جزئیات عملیات رو به کاربر نشون بدید.

یه مورد دیگه که می خواست یادم بره اینه که یادتون نره که مجوز دسترسی به sd card رو در منیفست اضافه کنید.

موفق باشید :)

 

0 0
ممنونم خیلی لطف کردی حمید عزیز (11 سال پیش)
0 0
تا اینجا درست. لیست تمام فایلا رو نشون میده. فرض کن توی قسمت else دوتا فایل پیدا کرد. حالا میخوام اسم اون دوتا فایل رو عوض کنم یا پسوند فایلا رو حذف کنم یا هر کار دیگه. گیرم الان اینجاس:( (11 سال پیش)
0 0
چه جوری می خواهید که تغییر نام صورت بپذیره؟ مثلا نام فایل اول file1 و نام فایل دوم file2 بشه (به صورت ایندکس وار)؟ (11 سال پیش)
0 0
یه چیزی تو همین مایه ها. دقیقا میخوام یه نقطه بذارم اول اسم فایل و نقطه ی پسوند فایل رو هم تبدیل کنم به # (11 سال پیش)
0 0
up (11 سال پیش)
+1 0
آقای منصوری پاسخ رو آپدیت کردم. یه مشکلی هم توی فراخوانی بود درستش کردم. الان این کد تمام فایل های sdcard و فایل های زیر پوشه ها رو به شکلی که گفتید تغییر نام میده. برنامه رو با احتیاط اجرا کنید چون تمام فایل های کارت حافظه رو به شکلی که گفتید تغییر نام میده.همچنین بعضی فایل منیجر ها (مخصوصا فایل منیجر پیش فرض گوشی) ، فایل ها و پوشه هایی که ابتدای نامشون نقطه (dot) باشه رو نمایش نمیدن. بعد از اجرای برنامه ممکنه اگه فایل منیجر پیش فرض گوشی رو اجرا کنید هیچ فایلی رو نمایش نده ، پس نگران نباشید، چون فایل ها وجود دارن ولی نمایش داده نمیشن. (11 سال پیش)
0 0
خیلی خیلی ممنونم. لطف کردی داداش. نه نگران مخفی شدن فایلا نیستم. با X-Plore میشه فایلای مخفی رو دید. ممنونم (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .