ورود

View Full Version : سوال: برنامه کار با فولدر و فایل



mohadese20
جمعه 20 تیر 1393, 00:26 صبح
سلام.من کدی رو لازم دارم که بتونه تا چهار لایه وارد فولدر بشه به صورت درختی پیمایش کنه تا بعد از چهار فولدر به فایل های توی فولدر نهایی برسه و تعداد آنها را به همراه اسمشان برگرداند وبترتیب همچنین فولدرهای بعدی و فایلهای درون آنها
این کدرو نوشتم ولی مشکلم اینه که نحوه تشخیص فایل از فولدر رو نمیدونم چطور بنویسم برنامه تا هزار تا فولدر موجود رو بافایلهای درون آنها برمیگردونه ولی چون چهارلایه ای هست اگه زودتر از چهار فولدر در فولدر دوم فایل باشه ارور میده چون چهارلایه کامل نمیشه
(تعداد زیادی فولدر هست که توهرکدوم سه فولدر دیگه وتواخری هم تعدادی فایل ،میخوام تعداد فایل ها و فولدر ها رو بااسامی برگردونه و بدونم ماکزیمم تعداد فایلها چه تعدادیه )

public static void main(String[] args) {
// TODO code application logic here
int [] a =new int[10000];
int h=0;
String[] dir1;
String[] dir2;
String[] dir = new java.io.File("Z:\\kargozini\\PERSENEL").list();
for (int i=0;i<dir.length;i++) {
dir1= new java.io.File("Z:\\kargozini\\PERSENEL\\" + dir[i]).list();
for (int j=0;j<dir1.length;j++ ){
dir2= new java.io.File("Z:\\kargozini\\PERSENEL\\" + dir[i]+ "\\"+ dir1[j]).list();
for(int k=0;k<dir2.length;k++) {
if (!dir2[k].contains(".DAT") && !dir2[k].contains(".TXT") ) {
a[h++]=new java.io.File("Z:\\kargozini\\PERSENEL\\" + dir[i]+ "\\"+ dir1[j]+ "\\" + dir2[k]).list().length;
System.out.println(h+":"+ dir[i]+dir1[j]+ dir2[k] + " :" + a[h-1]);
}
}
}
}

}
}

vahid-p
جمعه 20 تیر 1393, 04:33 صبح
کدی قبلا در این رابطه نوشتم که تا هر عمقی پیمایش میکنه و فایل و فولدر هم مشخصه. میتونید یکم تغییرش بدید. ( برای تشخیص تفاوت فولدر و فایل هم از متد isDirectory استفاده شده )
اینم لینکش : http://barnamenevis.org/showthread.php?328388-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%8 7%D8%A7%DB%8C-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%B4%D8%AF%D9%87-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%AC%D8%A7%D9%88%D8%A7&p=2016557&viewfull=1#post2016557

mohadese20
جمعه 20 تیر 1393, 18:12 عصر
خیلی ممنونم

vahid-p
شنبه 21 تیر 1393, 10:54 صبح
همین برنامه رو اگه بخوایم تعداد فایل های هر فولدر رو برگردونه و ماکزیمم تعداد فایل های تمامی فولدر ها رو برگردونه چطور باید تغییر بدیم

این سوالتون رو اینجا جواب میدم چون تو اون تاپیکی که لینکش رو داده بودم، جای بحث نبود. فقط برنامه قرار میگیره.

در مورد این سوالتون به نظرم کافیه که شما هنگام پیمایش به جای print کردن اسم فایل، تعداد اونها رو ذخیره کنید. مثلا میتونید از یک ArrayList برای اینکار استفاده کنید. البته شما دقیقا نگفتید که تعداد فایل های هر فولدر، فایلهای ساب فولدر هاش هم شامل میشه یا نه. با فرض منفی بودن این موضوع.

کدی که لینکش رو دادم تبدیل میشه به چنین کدی :


public static void main(String[] args) throws IOException {
File file = new File("C:\\Program Files\\Java\\jre8"); //Directory address
System.out.println(file.getAbsolutePath());
ArrayList<Integer> numFileList = new ArrayList<>();
if (file.isDirectory()) {
listFile(file, 0, numFileList);
}
}

public static void listFile(File file, int depth, ArrayList<Integer> numFileList) {
int num = 0;
for (File f : file.listFiles()) {
num++;
if (f.isDirectory()) {
for (int i = 0; i < depth; i++) {
System.out.print("|" + "\t");
}
System.out.println("|_" + f.getName());
listFile(f, depth + 1, numFileList);
} else {
for (int i = 0; i < depth; i++) {
System.out.print("|" + "\t");
}
System.out.println("|_" + f.getName());
}
}
numFileList.add(num);
}

اینجا اطلاعات فولدر ذخیره نمیشه و فقط تعداد ذخیره میشه. خب وقتی تعداد رو در ArrayList ذخیره کردی بعد از اتمام کار میتونی این حلقه رو داخل main بعد از همه کد ها قرار بدی :
int max=0;
for(int x:numFileList){
System.out.println(x);
if(x>max){
max=x;
}
}
System.out.println("Max="+max);

چون numFileList.add(num); در پایان متد listFile اومده، پس هر چه سطح فولدر بالاتر باشه، یعنی هنوز به عمق نرفته باشه، تعدادش دیرتر ذخیره میشه و در لیتی که پرینت میشه، آخر از همه تعدادش نوشته میشه. حالا اگر اسامی فولدر ها رو میخواید و اینا تغییرات جزئیه که مثلا به جای ArrayList<Integer> از ArrayList<MyElement> استفاده کنید که MyElement یه کلاسیه که خودتون میسازید و اطلاعات اضافه ای که دوست دارید ذخیره کنید. راستی من اینجا تعداد فایل ها رو مجموع تعداد فایل ها و فولدرهای اون دایرکتوری در نظر گرفتم، اگه فقط منظورتون فایله که اون num++ در متد listFile رو داخل شرط قسمت else بذارید.
تغییرات جزئی دیگه باخودتونه.
موفق باشید