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.
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.
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.
Klasördeki tüm alt klasörler üzerinde yineleyin ve orada tüm dosyaların özet boyutunu alın.
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;
}
}
kullanın apache-commons-io, basitçe ardışık tüm alt klasörleri yineleme ile hafif bir hata var bir sizeOfDirectory
yöntemlerle
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.
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 Tekerleği yeniden icat etmediği için +1 – everton
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
Belirtilen @ Fhl hatası, commons-io kütüphanesinin 2.5 sürümünden giderilmiştir. – 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;
}
}.
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;
}
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;
}
"Boyut" klasörü ne bekliyorsunuz? Dosya sistemindeki klasörün gerçek boyutu veya içindeki tüm dosyaların boyutu nedir? – TofuBeer