20/11/11

아라·2020년 11월 11일
0

국비교육

목록 보기
22/30

파일

파일 경로는 바뀌면 안되는 경우가 많기 때문에 final(상수)로 선언.

// 1. 파일 접근하기 -> 파일 참조하기 -> 파일 참조 객체 만들기
// 2. 파일 정보 보기

// 경로
final String path="/Users/ara/class/java/file/test.txt";

// 파일 참조 객체 생성
File file=new File(path);
//	System.out.println(file.exists()); // 접근할 파일이 존재하는지 확인
//	System.out.println(file.getAbsolutePath()); // 파일의 경로가 제대로 잡혀있는지 확인

if (file.exists()) {
	// 정보 읽기
	System.out.println(file.getName());
	System.out.println(file.isFile());
	System.out.println(file.isDirectory());
	System.out.printf("%tF %tT\n", file.lastModified(), file.lastModified()); // 2020-11-11 09:19:24 형식으로 출력
//	Calendar c=Calendar.getInstance();
//	c.setTimeInMillis(file.lastModified());
//	System.out.printf("%tF %tT\n", c, c); // 2020-11-11 09:19:24 형식으로 출력
	System.out.println(file.canRead());
	System.out.println(file.canWrite());
	System.out.println(file.isHidden());
	System.out.println(file.length()); // 파일크기! 바이트!
	System.out.println(file.getPath()); // 참조 당시 경로
	System.out.println(file.getAbsolutePath()); // 절대경로
}else {
	System.out.println("파일이 존재하지 않습니다.");
}
// 파일 조작
// - 생성, 복사, 이동, 이름바꾸기, 삭제

// 1. 파일명 수정
// test.txt -> aaa.txt
String path="/Users/ara/class/java/file/test.txt";
File file=new File(path);

String path2="/Users/ara/class/java/file/aaa.txt";
File file2=new File(path2);

if (file.exists()) {
	boolean result=file.renameTo(file2); // 파일의 상태 변화(성공유무가 반환값)
	System.out.println(result);
}else {
	System.out.println("폴더가 존재하지 않습니다.");
}

// 2. 이동
// file > aaa > hong.txt : 이동전
// file > bbb : 여기로 이동! hong.txt 파일 생기도록.
String path="/Users/ara/class/java/file/aaa/hong.txt";
File file=new File(path);

Calendar c=Calendar.getInstance();
String path2=String.format("/Users/ara/class/java/file/bbb/[%tT]hong.txt", c);
File file2=new File(path2);

if (file.exists()) {
	boolean result=file.renameTo(file2); // 파일의 상태 변화(성공유무가 반환값)
	System.out.println(result);
}else {
	System.out.println("폴더가 존재하지 않습니다.");
}

// 3. 삭제(휴지통 거치지 않는 완전삭제!)
String path="/Users/ara/class/java/file/aaa.txt";
File file=new File(path);

if (file.exists()) {
	boolean result=file.delete();
	System.out.println(result?"성공":"실패");
}else {
	System.out.println("폴더가 존재하지 않습니다.");
}

폴더

final String path="/Users/ara/class/java/file";
		
// 디렉토리 참조 객체 생성
// 디렉토리는 (크기가 없는) 파일의 일종! -> File클래스 이용. 자바는 Directory클래스는 없음.
// class File{
// public String parentDirectory="D:/test";
// }
File dir=new File(path);

if(dir.exists()) {
	System.out.println(dir.getName());
	System.out.println(dir.isFile());
	System.out.println(dir.isDirectory());
	System.out.println(dir.length()); // 파일크기! 바이트! -> 폴더가 소유하고 있는 파일들의 크기의 합
	System.out.println(dir.getPath()); // 참조 당시 경로
	System.out.println(dir.getAbsolutePath()); // 절대경로
}else {
	System.out.println("폴더가 존재하지 않습니다.");
}
// 폴더 조작
// 생성, 이동, 폴더명 수정, 삭제

// 1. 생성
String path="/Users/ara/class/java/file/ccc"; // ccc폴더를 만들 예정.
File dir=new File(path);

if(!dir.exists()) {
	dir.mkdir();
}else {
	System.out.println("같은 이름의 폴더가 이미 있습니다.");
}

// 폴더 여러개 생성
path="/Users/ara/class/java/file/ddd/eee"; // ccc폴더를 만들 예정.
dir=new File(path);
if(!dir.exists()) {
	dir.mkdirs();
}else {
	System.out.println("같은 이름의 폴더가 이미 있습니다.");
}

// 요구사항) 회원 > 회원별 개인 폴더 생성
String[] member={"홍길동", "아무개", "하하하", "호호호"};

for(String name:member) {
	path=String.format("/Users/ara/class/java/file/member/[개인폴더]%s님", name);
	dir=new File(path);
	dir.mkdir();
	System.out.println(name+"님 개인 폴더 생성 완료.");
}

// 요구사항) 자식 폴더 생성
// /Users/ara/class/java/file/todo
// 2020-01-01 ~ 2020-12-31 -> 366개
Calendar c=Calendar.getInstance();
c.set(2020, 0, 1);
for(int i=0;i<366;i++) {
	path=String.format("/Users/ara/class/java/file/todo/%tF", c);
	dir=new File(path);
	dir.mkdir();
	System.out.printf("%tF\n", c);
	c.add(Calendar.DATE, 1);
}

// 2, 3. 폴더명 수정, 이동
String path="/Users/ara/class/java/file/fff";
File dir=new File(path);

String path2="/Users/ara/class/java/file/aaa/fff"; // ccc폴더를 만들 예정.
File dir2=new File(path2);

if(dir.exists()) {
	System.out.println(dir.renameTo(dir2));
}else {
	System.out.println("같은 이름의 폴더가 이미 있습니다.");
}

// 4. 삭제
String path="/Users/ara/class/java/file/aaa/"; // 삭제하고자 하는 폴더 경로 끝에 / 이거 꼭 붙여줘야 함! 아님 삭제 안됨!
File dir=new File(path);
if (dir.exists()) {
	System.out.println(dir.delete()); // 폴더 delete시 하위에 내용물있으면 삭제 안됨.
}else {
	System.out.println("폴더가 존재하지 않습니다.");
}

월이 0부터인 이유? 요일 0(일요일)부터인 이유?

월, 요일 데이터는 숫자가 아니라 배열의 개념으로 시작했기 때문.
시작 1 : 수치로써 사용되는 데이터
시작 0 : 배열, 열거형으로써 사용되는 데이터

디렉토리의 내용 보기

String path="/Applications/Eclipse.app/Contents/Eclipse";
File dir=new File(path);
		
if (dir.exists()) {
	String[] list=dir.list();
	for(String name:list) {
		System.out.println(name);
	}
}else {
	System.out.println("폴더가 존재하지 않습니다.");
}

재귀구조로 파일 개수, 폴더 개수 세기

private static void m14() {
	// 이 폴더에 들어있는 모든 파일의 개수?
	String path="/Applications/Eclipse.app/Contents/Eclipse"; // ccc폴더를 만들 예정.
	File dir=new File(path);
	
	
	// 누적변수
	int count=0;
	
	// 해당 폴더의 파일 개수 세기
	if (dir.exists()) {
		count+=countFile(dir, count);
	}
	System.out.printf("총 파일 개수 : %,d개\n", count);
}
	
private static int countFile(File dir, int count) {
	// A. 목록 가져오기
	File[] list=dir.listFiles();
	
	// B. 파일 개수 누적
	for(File file:list) {
		if(file.isFile()) {
			count++;
		}
	}
	
	// C. 본인이 했던 행동 -> 자식 폴더 대상으로 다시 실행
	for(File subdir:list) {
		if (subdir.isDirectory()) {
			count=countFile(subdir, count); // 재귀구조
		}
	}
	return count;
}

객체들로 구성된 리스트의 정렬

System.out.println();
System.out.println(Arrays.toString(slist));
// 버블정렬
for(int i=0;i<slist.length-1;i++) {
	for(int j=0; j<slist.length-1-i;j++) {
		// compareTo() : 1(>), 0(=), -1(<) 셋 중 하나 반환.
		if (slist[j].getName().compareTo(slist[j+1].getName())>0) { // 이름에 따라 정렬
//		if (slist[j].getWeight()>slist[j+1].getWeight()) {
			Student temp=slist[j];
			slist[j]=slist[j+1];
			slist[j+1]=temp;
		}
	}
}
System.out.println(Arrays.toString(slist));

0개의 댓글