Sadece varargs için diziden imza değiştirin:
public static long getgFolderSize(final File... selectedDirectories){
long foldersize = 0;
for(final File item : selectedDirectories){
for(final File subItem : item.listFiles()){
if(subItem.isDirectory()){
foldersize += getFolderSize(subItem);
} else{
foldersize += subItem.length();
}
}
}
return foldersize;
}
Şimdi bir veya daha fazla Dosyalarla veya dosyaları bir dizi yöntemini çağırabilirsiniz.
Test kodu: (Ayrıca, her ikisi de varargs kullanıp kullanmadığınızı aynı şekilde çalıştığını görebilirsiniz, eğer ana dizininiz 5 alt klasörden daha azsa başarısız olur).
public static void main(final String[] args) throws Exception{
final File homeFolder = new File(System.getProperty("user.home"));
final File[] subFolders = homeFolder.listFiles(new FileFilter(){
private int ct = 0;
@Override
public boolean accept(final File pathname){
return pathname.isDirectory() && ct++ < 5;
}
});
System.out.println("Folders to check:" + Arrays.toString(subFolders));
long accumulated = 0l;
for(final File file : subFolders){
accumulated += getFolderSize(file);
}
final long allAtOnce = getFolderSize(subFolders);
final long withVarArgs =
getFolderSize(subFolders[0], subFolders[1], subFolders[2],
subFolders[3], subFolders[4]);
System.out.println("Accumulated: " + accumulated);
System.out.println("All at once: " + allAtOnce);
System.out.println("With varargs: " + withVarArgs);
}
(tüm platformlarda çalışması gerekir, sizin ev dizininizde ilk 5 klasörlerin boyutunu hesaplar sizin ev dizininizde az beş klasör varsa bir
ArrayIndexOutOfBoundException
başarısız olur). Benim makinede
Çıktı:
Klasörler kontrol etmek: [/ home/seanizer/Ubuntu One,/home/seanizer/Belgeler, /home/seanizer/.java,/home/seanizer/.mozilla, /home/seanizer/.evolution] Birikmiş
: Hepsi birden 1245886955
: varargs ile 1245886955
: Genellikle 1245886955
varargs bir dönüş türümün olmasına izin vermeyecek ve dahası çalışmıyor – slex
Makinemde mükemmel çalışıyor. Şimdi eklediğim ana yöntemi kullanmayı deneyin. –
Ve varargs, dönüş türü ile ilgisi yoktur. –