//요구사항] 특정 디렉토리를 지정하여 디렉토리 리스트와 파일 리스트 출력하시오.
import java.io.*;
import java.util.*;
class Test22_File
{
public static void main(String[] args)
{
File[] list = getFileList("E:\\luckyphil\\청년취업아카데미\\01java\\test\\파일입출력관련테스트"); //D:\java폴더의 내용얻기
System.out.println("\t\t파일명\t\t\t\t형식\t 크기");
System.out.printf("-------------------------------------------------------------------------------\n");
for(int i=list.length-1; i>=0; i--) { //내림차순정렬
String name = list[i].getName();
int koreanNum = getKoreanNum(name); //이름에 한글이 몇글자 포함되어있는지
String sort = getFolderOrFile(list[i]);
int num = 36-koreanNum; //고정자리 입력용
if(list[i].isFile()) { // 파일일 경우
String size = getSize(list[i]);
System.out.printf("%"+num+"s\t\t%2s\t%7s\n",name,sort,size);
}else { // 폴더일 경우
System.out.printf("%"+num+"s\t\t%2s\n",name,sort);
}
}//end for(i)
}//end main
//디렉토리의 내용 가져오기
public static File[] getFileList(String dir) {
File f = new File(dir);
if(f.exists()) //존재하면
{
File[] result = f.listFiles();
return result;
}
else { //존재하지 않으면
System.out.println("디렉토리 경로 오류");
}
return null;
}//end getFileList()
//폴더인지 파일인지 구분하여 문자열가져오기
public static String getFolderOrFile(File file) {
String result = "알수없음";
if(file.exists()) //존재하면
{
result = file.isFile() ? "파일" : "폴더"; //폴더, 파일 결정
}
else { //존재하지 않으면
System.out.println("존재하지 않음");
}
return result;
}//end getFolderOrFile()
//파일크기 가져오기
public static String getSize(File file) {
Long result = 0L;
String unit = "";
if(file.exists()) //존재하면
{
if(file.isFile()) { //파일이면
result = file.length(); //파일크기(Bytes)
if(result >= 0 && result <= 1024) { //B범위
unit = "B";
}else if(result <= 1024*1024) { //KB범위
result = Math.round(result / 1024.0);
unit = "KB";
}else if(result <= 1024*1024*1024) { //MB범위
result = Math.round(result / (1024*1024.0));
unit = "MB";
}else if(result <= 1024*1024*1024*1024) { //GB범위
result = Math.round(result / (1024*1024*1024.0));
unit = "GB";
}else {
System.out.println("크기가 1024GB이상은 지원 안함.");
}
}
}
else { //존재하지 않으면
System.out.println("파일이 없음");
}
return result+unit;
}//end folderOrFile()
//한글이 몇자나 포함되었는지 반환
public static int getKoreanNum(String str) {
int num=0;
for(int i=0; i< str.length(); i++) {
if ((str.charAt(i) > '가') && (str.charAt(i) < '힣'))
num++;
}
return num;
}
}