2010-07-02 29 views
12

Java'da klasör boyutunu nasıl alabilirim biliyor musunuz?Klasör boyutunu al

uzunluğu() Dosya sınıfında yöntem yalnızca bir olarak düşünebilirsiniz, ben her zaman genel olarak çok küçük bir "Boyut" var 0.

+0

"Boyut" klasörü ne bekliyorsunuz? Dosya sistemindeki klasörün gerçek boyutu veya içindeki tüm dosyaların boyutu nedir? – TofuBeer

cevap

0

Klasörlerin bir boyut olsun bu yöntemi kullanarak, dosyaları için çalışır indeks.

Bir klasör için "Boyut" döndüren tüm programlar aslında yinelenir ve dosyaların boyutunu ekler.

2

Klasördeki tüm alt klasörler üzerinde yineleyin ve orada tüm dosyaların özet boyutunu alın.

6
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; 
    } 
} 
27

kullanın apache-commons-io, basitçe ardışık tüm alt klasörleri yineleme ile hafif bir hata var bir sizeOfDirectory yöntemlerle

+0

+1 Uyarı, bu yöntemin çalışırken bir IllegalArgumentException atabileceği ciddi bir sorun var. Bkz. Https://issues.apache.org/jira/browse/IO-389 – everton

+0

Tekerleği yeniden icat etmemesi için – Fhl

+0

Belirtilen @ Fhl hatası, commons-io kütüphanesinin 2.5 sürümünden giderilmiştir. – X09

4

ile FileUtils sınıf var. Aşağıda gösterildiği gibi bazı dosya sistemleri sembolik bağlantıları kullanarak dairesel dizin yapıları oluşturmak imkanı mevcuttur:

mkdir -- parents father/son 
ln -sf ${PWD}/father father/son 
ls father/son/father/son/father/son/father/son/ 

Eğer java.io.File # getCanonicalPath yöntemini kullanabilirsiniz, bu hataya karşı korunmak için. Aşağıdaki kod, previous answer'un hafif bir değişikliğidir.

21
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

+1 Tekerleği yeniden icat etmediği için +1 – everton

+1

Bu yöntemde ciddi bir sorun var. Dosya boyutlarını birleştirirken bir IllegalArgumentException atabilir. Bkz. Https://issues.apache.org/jira/browse/IO-389 – Fhl

+0

Belirtilen @ Fhl hatası, commons-io kütüphanesinin 2.5 sürümünden giderilmiştir. – X09

0
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; 
    } 

}.

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; 
} 
0

her dosyanın boyutunu alma ve değişken büyüklükte ekleyerek, dosyanın bir klasör, dosya üzerinden git

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; 
}