Этот пример с сайта угловой документации просто делает href
, даже не присваивая его пустой строке:
[X]
import java.io.File;
public class GetFolderSize {
int totalFolder = 0;
int totalFile = 0;
public static void main(String args[]) {
String folder = "C:/GetExamples";
try {
GetFolderSize size = new GetFolderSize();
long fileSizeByte = size.getFileSize(new File(folder));
System.out.println("Folder Size: " + fileSizeByte + " Bytes");
System.out.println("Total Number of Folders: "
+ size.getTotalFolder());
System.out.println("Total Number of Files: " + size.getTotalFile());
} catch (Exception e) {}
}
public long getFileSize(File folder) {
totalFolder++;
System.out.println("Folder: " + folder.getName());
long foldersize = 0;
File[] filelist = folder.listFiles();
for (int i = 0; i < filelist.length; i++) {
if (filelist[i].isDirectory()) {
foldersize += getFileSize(filelist[i]);
} else {
totalFile++;
foldersize += filelist[i].length();
}
}
return foldersize;
}
public int getTotalFolder() {
return totalFolder;
}
public int getTotalFile() {
return totalFile;
}
}
Есть небольшая ошибка с простым рекурсивным итерационным перебором всех вложенных папок. В некоторых файловых системах возможно создание круговых структур каталогов с использованием символических ссылок, как показано ниже:
mkdir -- parents father/son
ln -sf ${PWD}/father father/son
ls father/son/father/son/father/son/father/son/
Чтобы защититься от этой ошибки, можно использовать метод java.io.File#getCanonicalPath. Приведенный ниже код является небольшой модификацией предыдущего ответа.
public static long getFileSize(File folder) throws IOException {
return ( getFileSize ( folder , new HashSet < String > ( ) ) ) ;
}
public static long getFileSize(File folder, Set<String> history)
throws IOException {
long foldersize = 0;
File[] filelist = folder.listFiles();
for (int i = 0; i < filelist.length; i++) {
System.err.println("HISTORY");
System.err.println(history);
boolean inHistory = history.contains(filelist[i].getCanonicalPath());
history.add(filelist[i].getCanonicalPath());
if (inHistory) {
// skip it
} else if (filelist[i].isDirectory()) {
foldersize += getFileSize(filelist[i], history);
} else {
foldersize += filelist[i].length();
}
}
return foldersize;
}
Используйте apache-commons-io, есть класс FileUtils
с методами sizeOfDirectory
Перебрать все подпапки в папке и получить суммарный размер всех файлов в них.
Папки обычно имеют очень маленький «Размер», их можно рассматривать как индекс.
Все программы, которые возвращают "Размер" папки, фактически выполняют итерацию и складывают размер файлов.