همین برنامه رو اگه بخوایم تعداد فایل های هر فولدر رو برگردونه و ماکزیمم تعداد فایل های تمامی فولدر ها رو برگردونه چطور باید تغییر بدیم
این سوالتون رو اینجا جواب میدم چون تو اون تاپیکی که لینکش رو داده بودم، جای بحث نبود. فقط برنامه قرار میگیره.
در مورد این سوالتون به نظرم کافیه که شما هنگام پیمایش به جای 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 بذارید.
تغییرات جزئی دیگه باخودتونه.
موفق باشید