728x90
★ 예제 1) 요구사항 : 파일의 경로를 입력받아 파일 정보를 출력하시오.
- 조건
- 파일 크기 단위 변환 출력(소수이하 1자리까지) : B, KB, MB, GB, TB
- 파일경로
- /Users/kimdaehwan/Desktop/Quest/file/class.txt
- 소스코드
public class Q0110 {
public static void main(String[] args) {
//파일 경로: /Users/kimdaehwan/Desktop/Quest/file/class.txt
String path = "/Users/kimdaehwan/Desktop/Quest/file/class.txt";
File file = new File(path);
System.out.printf("파일명 : %s\n", file.getName() );
System.out.printf("파일 종류 : %s\n", file.getName().substring(file.getName().lastIndexOf(".")+1));
System.out.printf("파일 크기 : %s", transe(path));
}//main
public static String transe(String path) {
File file = new File(path);
long size = 0;
String result = "";
if(file.exists()) {
size = file.length();
}
if(size<1024) {
return result += size + "B";
} else if (size < 1024*1024) {
return result += String.format("%.1f", size / 1024.0) + "KB";
} else if (size < 1024*1024*1024) {
return result += String.format("%.1f", size / 1024.0 / 1024.0) + "MB";
} else if (size < 1024*1024*1024*1024) {
return result += String.format("%.1f", size / 1024.0 / 1024.0 / 1024.0) + "GB";
} else if (size < 1024*1024*1024*1024*1024) {
return result += String.format("%.1f", size / 1024.0 / 1024.0 / 1024.0 / 1024.0) + "TB";
}
return "";
}
}
★ 예제 2) 요구사항 : 지정한 폴더의 특정 파일(확장자)만을 출력하시오.
- 조건
- 확장자 대소문자 구분없이 검색 가능
- 소스코드
public class Q0111 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("폴더 선택 : ");
String path = scan.nextLine();
System.out.print("확장자 : ");
String temp = scan.nextLine();
File dir = new File(path);
File[] list = dir.listFiles();
String result2 = "";
for(File file : list) {
String result = file.getName().substring(file.getName().lastIndexOf(".")+1);
if(temp.equals(result)) {
result2 += String.format("%s\n", file.getName());
}
}
System.out.println(result2);
}
}
- 실행결과
★ 예제 3) 요구사항 : 지정한 파일을 다른 폴더로 이동하고, 이동한 파일과 동일한 파일명의 파일이 존재하는 경우 중복 처리하시오.
- 조건
- 해당 폴더에 이미 동일 파일이 있을 경우 덮어쓰거나(Y) or 작업을 취소(N) 하시오
- 소스코드
public class Q0112 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("이동할 파일 주소 : ");
String storePath = scan.nextLine();
System.out.print("이동시킬 파일 주소 : ");
String movePath = scan.nextLine();
System.out.println("파일 이동을 실행합니다.");
File storedir = new File(storePath);
File[] storelist = storedir.listFiles();
File movedir = new File(movePath);
File[] movelist = movedir.listFiles();
if(!movedir.exists()) {
storedir.renameTo(movedir);
System.out.println("파일 이동을 완료했습니다.");
}else {
System.out.print("같은 이름을 가지는 파일이 존재합니다. 덮어쓸까요? (Y : N)");
String result = scan.next();
if(result.equals("Y")) {
movedir.delete();
storedir.renameTo(movedir);
System.out.println("파일 이동을 완료했습니다.");
}else {
System.out.println("작업을 취소합니다.");
}
}
}
}
- 실행결과
★ 예제 4) 요구사항 : 음악 파일이 100개 있다. 파일명 앞에 일련 번호를 붙이시오
- 조건
- 001부터 3자리 형식으로 붙이시오.
- 소스코드
public class Q0113 {
public static void main(String[] args) {
String path = "/Users/kimdaehwan/Desktop/Quest/kind/음악 파일/Music";
File dir = new File(path);
int n = 1;
File[] list = dir.listFiles();
for(File file : list) {
if(file.getName().substring(file.getName().lastIndexOf(".")+1).toLowerCase().equals("mp3")) {
File temp = new File(path + "/" + String.format("[%03d]%s", n, file.getName()));
file.renameTo(temp);
n++;
}
}
System.out.println("완료되었습니다.");
}
}
- 실행결과
★ 예제 5) 요구사항 : 이미지 파일이 있다. 확장자별로 파일이 몇개 있는지 세시오
- 조건
- 새로운 확장자 파일이 추가되도 동작이 가능하게 구현하시오.
- 소스코드
public class Q0114 {
public static void main(String[] args) {
String path = "/Users/kimdaehwan/Desktop/Quest/kind/확장자별 카운트";
File dir = new File(path);
HashMap<String,Integer> number = new HashMap<String,Integer>();
File[] list = dir.listFiles();
for(File file : list) {
//확장자가 무엇인지 나누는 작업
String result = file.getName().substring(file.getName().lastIndexOf(".")+1);
//확장자를 나눈 후, 해당 확장자에 대해 key값을 설정하여 개수에 따라 증가
if(number.get(result) == null) {
number.put(result,1);
}else {
number.put(result, number.get(result)+1);
}
}
System.out.println(number);
//number.keySet = number의 HashMap에서 key값만을 가져와서 keys라는 배열에 저장.
Set<String> keys = number.keySet();
for(String key : keys) {
System.out.printf("*.%s : %d개\n", key, number.get(key));
}
}
}
- 실행결과
★ 예제 6) 요구사항 : 파일의 크기가 0byte인 파일만 삭제하시오.
- 조건
- 폴더 > 파일 제거
- 소스코드
public class Q0115 {
public static void main(String[] args) {
String path = "/Users/kimdaehwan/Desktop/Quest/kind/파일 제거";
File dir = new File(path);
File[] list = dir.listFiles();
int n = 0;
for(File file : list) {
if(file.length()==0) {
file.delete();
n++;
}
}
System.out.printf("총 %d개의 파일을 삭제했습니다.", n);
}
}
- 실행결과
★ 예제 7) 요구사항 : MusicA 폴더와 MusicB 폴더를 서로 비교해서 양쪽 폴더에 모두 존재하는 파일만 출력하시오.
- 조건
- 중복 파일을 찾아내시오.
- 소스코드
public class Q0116 {
public static void main(String[] args) {
String path1 = "/Users/kimdaehwan/Desktop/Quest/kind/동일 파일/MusicA";
String path2 = "/Users/kimdaehwan/Desktop/Quest/kind/동일 파일/MusicB";
File dir1 = new File(path1);
File dir2 = new File(path2);
File[] list1 = dir1.listFiles();
File[] list2 = dir2.listFiles();
for(File file : list1) {
for(File file2 : list2) {
if(file.getName().equals(file2.getName())) {
System.out.println(file.getName());
}
}
}
}
}
- 실행결과
★ 예제 8) 요구사항 : 내용물이 있는 "delete"폴더를 삭제하시오.
- 조건
- 재귀 메소드 사용
- 삭제된 파일과 자식 폴더 개수를 출력하시오.
- 소스코드
public class Q0117 {
public static void main(String[] args) {
String path = "/Users/kimdaehwan/Desktop/Quest/kind/폴더 삭제/delete";
File dir = new File(path);
HashMap<String, Integer> count = new HashMap<String, Integer>();
count.put("dir", 0);
count.put("file", 0);
deleteFile(dir, count);
System.out.println("폴더를 삭제했습니다.");
System.out.printf("삭제된 폴더는 %d개이고, 파일은 %d개 입니다.", count.get("dir"), count.get("file"));
}//main
private static void deleteFile(File dir, HashMap<String, Integer> count) {
File[] list = dir.listFiles();
//만약 파일이 담긴 곳이라면 이 문장을 실행
for(File file : list) {
if(file.isFile()) {
count.put("file", count.get("file")+1);
file.delete();
}
}
//만약 디렉터리가 담긴 곳이라면 이 문장을 실행
for(File file2 : list) {
if(file2.isDirectory()) {
deleteFile(file2, count); //재귀, 자기 자신을 반복
}
}
count.put("dir", count.get("dir")+1);
dir.delete();
}
}
- 실행결과
★ 예제 9) 요구사항 : 폴더 내의 모든 파일들을 찾아 크기를 비교하고, 크기가 큰 순으로 정렬하시오.
- 조건
- 자식 폴더내의 파일도 모두 검색하시오.
- 부모 자식 폴더에 상관없이 파일을 한번에 비교하시오.
- 소스코드
public class Q0118 {
public static void main(String[] args) {
String path = "/Users/kimdaehwan/Desktop/Quest/kind/크기정렬";
File dir = new File(path);
ArrayList<File> files = new ArrayList<File>();
addFile(dir, files);
for(int i=0; i<files.size()-1; i++) {
for(int j=0; j<files.size()-i-1; j++) {
if(files.get(j).length() < files.get(j+1).length()) {
File temp = files.get(j);
files.set(j, files.get(j+1));
files.set(j+1, temp);
}
}
}
System.out.printf("%-33s%s\t%10s\n", "[파일명]", "[크기]", "[파일이 들어있는 폴더]");
for(File file : files) {
System.out.printf("%-30s\t%10s\t%s\n"
,file.getName()
,getSize(file.length())
,file.getParentFile().getName());
}
}
private static String getSize(long size) {
String result = "";
if(size<1024) {
return result += size + "B";
} else if (size < 1024*1024) {
return result += String.format("%.1f", size / 1024.0) + "KB";
} else if (size < 1024*1024*1024) {
return result += String.format("%.1f", size / 1024.0 / 1024.0) + "MB";
} else if (size < 1024*1024*1024*1024) {
return result += String.format("%.1f", size / 1024.0 / 1024.0 / 1024.0) + "GB";
} else if (size < 1024*1024*1024*1024*1024) {
return result += String.format("%.1f", size / 1024.0 / 1024.0 / 1024.0 / 1024.0) + "TB";
} return "";
}
private static void addFile(File dir, ArrayList<File> files) {
File[] list = dir.listFiles();
//만약 파일이 담긴 곳이라면 이 문장을 실행
for(File file : list) {
if(file.isFile()) {
files.add(file);
}
}
//만약 디렉터리가 담긴 곳이라면 이 문장을 실행
for(File file2 : list) {
if(file2.isDirectory()) {
addFile(file2,files);//재귀 함수
}
}
}
}
★ 예제 10) 요구사항 : 아래의 조건에 따라 파일을 폴더별로 분류/이동하시오.
- 조건
- 1차 : 직원 이름으로 폴더 생성
- 2차 : 년도별로 폴더 생성
- 3차 : 각 파일을 직원 > 년도 폴더에 이동
- 소스코드
public class Q0118 {
public static void main(String[] args) {
String path = "/Users/kimdaehwan/Desktop/Quest/kind/크기정렬";
File dir = new File(path);
ArrayList<File> files = new ArrayList<File>();
addFile(dir, files);
for(int i=0; i<files.size()-1; i++) {
for(int j=0; j<files.size()-i-1; j++) {
if(files.get(j).length() < files.get(j+1).length()) {
File temp = files.get(j);
files.set(j, files.get(j+1));
files.set(j+1, temp);
}
}
}
System.out.printf("%-33s%s\t%10s\n", "[파일명]", "[크기]", "[파일이 들어있는 폴더]");
for(File file : files) {
System.out.printf("%-30s\t%10s\t%s\n"
,file.getName()
,getSize(file.length())
,file.getParentFile().getName());
}
}
private static String getSize(long size) {
String result = "";
if(size<1024) {
return result += size + "B";
} else if (size < 1024*1024) {
return result += String.format("%.1f", size / 1024.0) + "KB";
} else if (size < 1024*1024*1024) {
return result += String.format("%.1f", size / 1024.0 / 1024.0) + "MB";
} else if (size < 1024*1024*1024*1024) {
return result += String.format("%.1f", size / 1024.0 / 1024.0 / 1024.0) + "GB";
} else if (size < 1024*1024*1024*1024*1024) {
return result += String.format("%.1f", size / 1024.0 / 1024.0 / 1024.0 / 1024.0) + "TB";
} return "";
}
private static void addFile(File dir, ArrayList<File> files) {
File[] list = dir.listFiles();
//만약 파일이 담긴 곳이라면 이 문장을 실행
for(File file : list) {
if(file.isFile()) {
files.add(file);
}
}
//만약 디렉터리가 담긴 곳이라면 이 문장을 실행
for(File file2 : list) {
if(file2.isDirectory()) {
addFile(file2,files);//재귀 함수
}
}
}
}
- 실행결과
728x90
'자바' 카테고리의 다른 글
JAVA STEP 43. File 입출력 (0) | 2023.02.27 |
---|---|
JAVA STEP 42. 재귀 메소드 (0) | 2023.02.27 |
JAVA STEP 40. File/Directory 조작 (0) | 2023.02.24 |
JAVA STEP 39. Hashset 직접 구현하기 (0) | 2023.02.24 |
JAVA STEP 38. 컬렉션(HashSet) (0) | 2023.02.24 |