본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Java(자바)/Java 기본

Java 폴더 용량 측정, 폴더 갯수 측정(Java measure folder size)

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2020. 11. 16.

간단정리!

자바에서 폴더용량을 측정하는 방법 입니다!

재귀호출(Recursive Call) 방식의 메소드 입니다.

 

1. 폴더 내부의 용량을 측정

//폴더 용량을 측정 합니다.
public static long measurefolderSize(File directory) {
    long length = 0;
    try {
        for (File file : directory.listFiles()) {
            if (file.isFile())
                length += file.length();
        else
            length += measurefolderSize(file);
        }			
    } catch (Exception e) {

    }
    return length;
}

 

위와 비슷하게 갯수를 더하면 폴더 내부의 파일 갯수를 구할 수 있습니다.

2. 폴더 내부의 파일 갯수 측정

//폴더 내부 파일 갯수를 측정 합니다.
public static long folderFileCount(File directory) {
    long length = 0;
    try {
        for (File file : directory.listFiles()) {
            if (file.isFile())
                length++;  //폴더 내부 파일 갯수
        else
            length += folderFileCount(file);
        }			
    } catch (Exception e) {

    }
    return length;
}

 

2개의 메소드를 1개로 바꾸어 사용해도 무방할 것 같습니다.

Java8에서 지원하는 스트림과 람다형식으로 바꾸면 엄청 간결하게 사용가능 합니다.

먼저 폴더 내부의 용량을 측정하는 메소드를 바꾸어 보겠습니다.

//폴더 용량을 측정 합니다.
public static long measurefolderSize(File directory) {
    long length = 0;
    try {
        for (File file : directory.listFiles()) {
            if (file.isFile())
                length += file.length();
        else
            length += measurefolderSize(file);
        }			
    } catch (Exception e) {

    }
    return length;
}

//Java8에서의 람다와 스트림을 활용한 모습
public static long measurefolderSize(String directory) {
    long length = 0;
    Path folder = Paths.get(directory);
    try {
        length = Files.walk(folder).filter(p -> p.toFile().isFile())
            .mapToLong(p -> p.toFile().length()).sum();
    } catch (IOException e) {  }
    return length;
}

 

Files.walk라는 메소드를 활용한 뒤에 스트림을 통해서 간결하게 표현하여 보았습니다.

마찬가지로 폴더 내부의 파일 갯수를 구하는 메소드도 쉽게 표현 가능 합니다.

//폴더 내부 파일 갯수를 측정 합니다.
public static long folderFileCount(File directory) {
    long length = 0;
    try {
        for (File file : directory.listFiles()) {
            if (file.isFile())
                length++;  //폴더 내부 파일 갯수
        else
            length += folderFileCount(file);
        }			
    } catch (Exception e) {

    }
    return length;
}

//Java8에서의 람다와 스트림을 활용한 모습
public static long folderFileCount(String directory) {
    long length = 0;
    Path folder = Paths.get(directory);
    try {
        length = Files.walk(folder).filter(p -> p.toFile().isFile())
            .mapToLong(p -> 1).sum();  //자신 갯수인 1을 반환합니다.
    } catch (IOException e) {  }
    return length;
}

 

둘다 동작하는 방식에는 문제가 없으므로 관리하기 쉬운 방법을 선택하여 적용하면 좋을 것 같습니다.

최종 소스코드 입니다.

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;


public class FolderSizeCount {

    //폴더 용량을 측정 합니다.
    public static long measurefolderSize(File directory) {
        long length = 0;
        try {
            for (File file : directory.listFiles()) {
                if (file.isFile())
                    length += file.length();
            else
                length += measurefolderSize(file);
            }			
        } catch (Exception e) {
        }
        return length;
    }
    
    //폴더 내부 파일 갯수를 측정 합니다.
    public static long folderFileCount(File directory) {
        long length = 0;
        try {
            for (File file : directory.listFiles()) {
                if (file.isFile())
                    length++;  //폴더 내부 파일 갯수
            else
                length += folderFileCount(file);
            }			
        } catch (Exception e) {
        }
        return length;
    }    
    

    //Java8에서의 람다와 스트림을 활용한 폴더 용량을 측정
    public static long measurefolderSize(String directory) {
        long length = 0;
        Path folder = Paths.get(directory);
        try {
            length = Files.walk(folder).filter(p -> p.toFile().isFile())
                .mapToLong(p -> p.toFile().length()).sum();
        } catch (IOException e) {  }
        return length;
    }


    //Java8에서의 람다와 스트림을 활용한 파일 갯수를 측정
    public static long folderFileCount(String directory) {
        long length = 0;
        Path folder = Paths.get(directory);
        try {
            length = Files.walk(folder).filter(p -> p.toFile().isFile())
                .mapToLong(p -> 1).sum();  //자신 갯수인 1을 반환합니다.
        } catch (IOException e) {  }
        return length;
    }    

}

 

궁금하거나 문의사항 있으면 언제든 연락주세요!

^-^*

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글