Czy wiesz, w jaki sposób mogę uzyskać rozmiar folderu w Javie?Pobierz rozmiar folderu
Długość() metoda w klasie pliku działa tylko dla plików, przy użyciu tej metody zawsze dotrzesz do rozmiaru 0.
Czy wiesz, w jaki sposób mogę uzyskać rozmiar folderu w Javie?Pobierz rozmiar folderu
Długość() metoda w klasie pliku działa tylko dla plików, przy użyciu tej metody zawsze dotrzesz do rozmiaru 0.
foldery mają zwykle bardzo małe „Format”, można myśleć o nich jako indeks.
Wszystkie programy, które zwrócą "Rozmiar" dla danego folderu, faktycznie iterują i sumują rozmiar plików.
Powtórz wszystkie podfoldery w folderze i pobierz podsumowanie wszystkich plików.
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;
}
}
Użyj Apache commons-io, istnieje FileUtils
klasę z sizeOfDirectory
metod
+1 za niezainformowanie koła – everton
Ostrzeżenie: ta metoda ma poważny problem, gdy może wyrzucić wyjątek IllegalArgumentException podczas działania. Zobacz https://issues.apache.org/jira/browse/IO-389 – Fhl
Błąd, o którym wspomniał @Fhl, został naprawiony z wersji 2.5 biblioteki commons-io. – X09
Jest niewielki błąd z rekurencyjnie iteracji po prostu wszystkie podfoldery. Jest to możliwe na niektórych systemach plików, aby utworzyć koliste struktury katalogów za pomocą łączy symbolicznych, jak zostanie wykazane poniżej:
mkdir -- parents father/son
ln -sf ${PWD}/father father/son
ls father/son/father/son/father/son/father/son/
Aby ustrzec się przed tego błędu, można użyć metody java.io.File # getCanonicalPath. Poniższy kod to niewielka modyfikacja previous answer.
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;
}
import java.io.File;
import org.apache.commons.io.FileUtils;
public class FolderSize
{
public static void main(String[] args)
{
long size = FileUtils.sizeOfDirectory(new File("C:/Windows/folder"));
System.out.println("Folder Size: " + size + " bytes");
}
}
+1 za niewymienienie nowego koła – everton
Ta metoda ma poważny problem. Może generować wyjątek IllegalArgumentException podczas agregowania rozmiarów plików. Zobacz https://issues.apache.org/jira/browse/IO-389 – Fhl
Błąd, o którym wspomniał @Fhl, został naprawiony z wersji 2.5 biblioteki commons-io. – X09
public class DirectorySize {
public static void main(String[] args) {
// Prompt the user to enter a directory or a file
System.out.print("Please Enter a Directory or a File: ");
Scanner input = new Scanner(System.in);
String directory = input.nextLine();
// Display the size
System.out.println(getSize(new File(directory)) + " bytes");
}
public static long getSize(File file) {
long size = 0; // Store the total size of all files
if (file.isDirectory()) {
File[] files = file.listFiles(); // All files and subdirectories
for (int i = 0; i < files.length; i++) {
size += getSize(files[i]); // Recursive call
}
}
else { // Base case
size += file.length();
}
return size;
}
}
Przejdź przez folderu, plik po pliku, coraz rozmiar każdego pliku i dodając je do zmiennej wielkości.
static int size=0;
public static int folderSize(File folder){
size = 0;
File[] fileList = folder.listFiles();
for(File file : fileList){
if(!file.isFile()){
folderSize(file);
}
size += file.length();
}
return size;
}
Czego oczekujesz w folderze "size"? Rzeczywisty rozmiar folderu w systemie plików lub rozmiar wszystkich plików w nim? – TofuBeer