Sai come posso ottenere la dimensione della cartella in Java?Ottieni dimensioni cartella
La lunghezza() metodo nella classe File funziona solo per i file, utilizzando tale metodo che ho sempre ottenere una dimensione di 0.
Sai come posso ottenere la dimensione della cartella in Java?Ottieni dimensioni cartella
La lunghezza() metodo nella classe File funziona solo per i file, utilizzando tale metodo che ho sempre ottenere una dimensione di 0.
cartelle hanno generalmente una piccola "Size", si può pensare a loro come un indice.
Tutti i programmi che restituiscono una "dimensione" per una cartella effettivamente iterano e sommano le dimensioni dei file.
Iterare su tutte le sottocartelle della cartella e ottenere le dimensioni di riepilogo di tutti i file presenti.
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;
}
}
utilizzare Apache-commons-io, c'è una classe FileUtils
con sizeOfDirectory
metodi
+1 per non reinventare la ruota – everton
Attenzione, questo metodo ha un problema serio in cui è possibile lanciare un IllegalArgumentException durante l'esecuzione. Vedi https://issues.apache.org/jira/browse/IO-389 – Fhl
Il bug che @Fhl menzionava è stato risolto dalla versione 2.5 della libreria commons-io. – X09
C'è un piccolo errore con sufficiente ricorsivamente iterare su tutte le sottocartelle. E 'disponibile in alcuni file system per creare strutture di directory circolare usando i link simbolici come illustrato di seguito:
mkdir -- parents father/son
ln -sf ${PWD}/father father/son
ls father/son/father/son/father/son/father/son/
Per evitare questo errore, è possibile utilizzare il metodo java.io.File # getCanonicalPath. Il codice seguente è una leggera modifica di 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 per non reinventare la ruota – everton
Questo metodo ha un problema serio. Può lanciare un IllegalArgumentException mentre aggrega le dimensioni del file. Vedi https://issues.apache.org/jira/browse/IO-389 – Fhl
Il bug che @Fhl menzionava è stato risolto dalla versione 2.5 della libreria 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;
}
}
Passare attraverso una cartella, file per file, ottenendo la dimensione di ogni file e aggiungendo alla dimensione variabile.
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;
}
Cosa ti aspetti che la "dimensione" della cartella sia? La dimensione effettiva della cartella nel file system o la dimensione di tutti i file al suo interno? – TofuBeer