간단정리!
자바에서 폴더용량을 측정하는 방법 입니다!
재귀호출(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;
}
}
궁금하거나 문의사항 있으면 언제든 연락주세요!
^-^*
반응형
'Java(자바) > Java 기본' 카테고리의 다른 글
Java SpotBugs 정적 분석 도구(Java 취약점검, 자바 취약점검) (0) | 2020.12.16 |
---|---|
Java 버전에 따른 인터페이스 상속 정리(자바 인터페이스 상속) (2) | 2020.12.11 |
Java warning, Java 컴파일 경고 무시(간단 정리) (0) | 2020.11.09 |
jconsole로 프로그램 모니터링(Java jconsole) (0) | 2020.10.13 |
Java netty Sokect server (netty를 활용한 간단한 소켓 서버) (4) | 2020.09.21 |
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)
댓글