先說明一下 代碼求的是一個文件夾的大小
****寫法1:用全局變量 不對 寫法2 :用局部變量 對****
為什麼?最好能解釋的詳細一點
import java.io.File;
import java.util.Scanner;
public class Directory{
public static void main(String []args){
System.out.println("Enter a directory of file ") ;
Scanner input = new Scanner (System.in);
String directory = input.nextLine();
System.out.println(getSize(new File(directory)) + "bytes");
}
public static long getSize(File file ){
long size = 0;
if (file.isDirectory()){
File[]files = file.listFiles();
for (int i =0;files != null && i<files.length; i++)
size+=getSize(files[i]);
}
else
size +=file.length();
return size;
}
}
如果你使用成員變量,那麼你就不要返回值,因為每次都將獲得的文件大小累加到成員變量size上了。但很顯然你使用成員變量的同時又返回了值。
比方說:
第一次查找到一個文件,大小是 100 byte,size 此時 = 100;
第二次查找到一個文件,大小是 200 byte , size 此時 = 300;
然後查找到一個文件夾,此時遞歸。
緊接著找的一個文件,文件的大小是 50 byte, size 此時 = 350;
這個文件夾沒有文件了,退出,注意!!! 重點來了,return 一個 size
而你用size += getSize() 去接收返回值,此時的成員變量會是多少呢? 350 + 350 = 700,莫名其妙的翻了一倍有木有!!!!
這樣子的話,如果你這個文件夾裡的有很多層級,那就一直一倍一倍的往上翻,最後就是個天文數字。。。。
自個好好理一下,我說的如果你能夠理解那就最好不過。