파일(File)
파일(File)
[폴더 생성, make directory]
- mkdir() : boolean
- D:\java\file 경로에 AAA폴더 생성 하기 (1개의 폴더)
String path = "D:\\java\\file\\AAA";
File dir = new File(path);
if(!dir.exists()) {
dir.mkdir();
System.out.println("생성 완료");
} else {
System.out.println("같은 이름의 폴더가 이미 존재합니다.");
}
//OUTPUT
생성 완료
--> D:\java\file\ 경로에 AAA폴더 생성 완료
- mkdirs() : boolean
- D:\java\file 경로에 AAA 안에, TEST 안에, BBB 폴더 생성 하기 (3개의 폴더)
String path = "D:\\java\\file\\AAA\\TEST\\BBB";
File dir = new File(path);
if(!dir.exists()) {
dir.mkdirs();
System.out.println("생성 완료");
} else {
System.out.println("같은 이름의 폴더가 이미 존재합니다.");
}
//OUTPUT
생성 완료
--> D:\java\file 경로에 AAA\TEST\BBB 총 3개 폴더 생성 완료
[폴더명 변경 & 폴더 이동]
- renameTo() : boolean
- 폴더명 변경 + 폴더 이동 == 파일명 변경 + 파일명 이동 (둘이 똑같다)
String path = "D\\java\\file\\AAA";
String path2 = "D\\java\\file\\CCC";
File dir = new File(path);
File dir2 = new File(path2);
if (dir.exists()) {
dir.renameTo(dir2);
System.out.println("완료");
}
//OUTPUT
완료
--> D\java\file에 있는 AAA폴더가 CCC폴더로 이름변경됨.
//----------------------------------------------------
path = "D\\java\\file\\CCC";
path2 = "D\\java\\file\\DDD\\EEE";
dir = new File(path);
dir2 = new File(path2);
if (dir.exists()) {
dir.renameTo(dir2);
System.out.println("완료");
}
//OUTPUT
완료
--> D\java\file에 있는 CCC폴더가 DDD\EEE 폴더로 이동됨.
[폴더 삭제하기]
- delete() : boolean
- 파일(file)은 무조건 삭제가 가능하지만, 폴더는 빈 폴더만 가능하다. (차이점)
- 폴더에 내용물이 있으면 삭제 불가 (개발자가 그 안의 모든 내용물을 각각 직접 삭제해야함)
String path = "D:\\java\\file\\AAA";
File dir = new File(path);
if (dir.exists()) {
System.out.println(dir.delete());
}
//OUTPUT
true
--> D:\java\file 경로에 AAA 폴더 삭제됨
[파일 복사]
- 바이트 단위 복사
- FileInputStream : 파일의 내용을 바이트 단위 읽기
- FileOutputStream : 파일의 내용을 바이트 단위 쓰기
- try-catch문의 코드 내용보다 동작 원리만 이해하자. (복사 코드는 동일하므로 복붙가능)
File org = new File("D:\\java\\file\\Test.zip");
File copy = new File("D:\\java\\file\\AAA\\Test.zip");
try {
FileInputStream fis = new FileInputStream(org);
FileOutputStream fos = new FileOutputStream(copy);
//버퍼(512KB ~ 1KB 내외)
byte[] buffer = new byte[1024];
int length = 0;
//복사
while ((length = fis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
System.out.println("파일 복사 완료");
} catch (Exception e) {
System.out.println(e);
}
//OUTPUT
파일 복사 완료
--> D:\java\file 경로에 있는 Test.zip 파일이 AAA폴더에 복사됨
[폴더의 내용보기]
- listFiles()
- 여러방법으로 해당 경로의 폴더/파일을 확인 할 수 있음.
String path = "C:\\eclipse";
File dir = new File(path);
if (dir.exists()) {
System.out.println("========방법1========");
File[] list = dir.listFiles();
for (File file : list) {
System.out.printf("%s - %s\n"
,file.getName()
,file.isFile() ? "파일" : "폴더");
}
System.out.println("========방법2========");
for(File sub : list) {
if(sub.isDirectory()) {
System.out.println("[%s]\n", sub.getName());
}
}
for(File sub : list) {
if(sub.isFile()) {
System.out.println(sub.getName());
}
}
}
//OUTPUT
========방법1========
.eclipseproduct - 파일
artifacts.xml - 파일
configuration - 폴더
dropins - 폴더
eclipse.exe - 파일
eclipse.ini - 파일
eclipsec.exe - 파일
features - 폴더
lombok.jar - 파일
p2 - 폴더
plugins - 폴더
readme - 폴더
========방법2========
[configuration]
[dropins]
[features]
[p2]
[plugins]
[readme]
.eclipseproduct
artifacts.xml
eclipse.exe
eclipse.ini
eclipsec.exe
lombok.jar
[폴더 안에 모든 파일/폴더 개수 & 파일/폴더 크기]
- 재귀 호출 해야함 (for문으로 하면 한도끝도 없음...)
//C:\eclipse에 들어있는 파일의 개수?
//크기: 747MB (784,330,273 바이트)
//내용: 파일 11,979, 폴더 2,598
private static int count = 0;
private static int dirCount = 0;
private static long size = 0;
public static void main(String[] args) {
String path = "C:\\eclipse";
File dir = new File(path);
if (dir.exists()) {
countFile(dir);
System.out.printf("총 파일 개수: %,d개\n
총 폴더 개수: %,d개\n
폴더 크기(Byte): %,dB\n
폴더 크기(MB): %,.0fMB\n"
, count
, dirCount
, size //Byte
, (double)size/1024/1024);
}
}
//재귀 호출 메소드
public static void countFile(File dir) {
File[] list = dir.listFiles();
//파일개수, 파일크기
for (File sub : list) {
if (sub.isFile()) {
count++;
size += sub.length();
}
}
//폴더확인
for (File sub : list) {
if (sub.isDirectory()) {
countFile(sub) //재귀 호출
}
}
dirCount++;
}
//OUTPUT
총 파일 개수: 11,979개
총 폴더 개수: 2,599개
폴더 크기(Byte): 784,330,417B
폴더 크기(MB): 748MB
MEMO>
# 답이없다.. 복습하자.. 문제 계속 풀자..
# File 너무 어지럽고 거기에 쓰이는 재귀호출 미치겠고!!!!!!!!!!!!
# File 클래스를 잘 활용하면 사무업무나, 여기저기에 많이 도움이 되니깐 필히!! 이해하고 공부하자!!
'인천일보아카데미 > - 학습일지' 카테고리의 다른 글
[학습일지]JAVA교육일지 38일차 (0) | 2022.06.15 |
---|---|
[학습일지]JAVA교육일지 36일차 (0) | 2022.06.14 |
[학습일지]JAVA교육일지 33일차 (0) | 2022.06.13 |
[학습일지]JAVA교육일지 32일차 (0) | 2022.06.10 |
[학습일지]JAVA교육일지 31일차 (0) | 2022.06.10 |